首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >printf问题

printf问题
EN

Stack Overflow用户
提问于 2014-10-02 10:12:37
回答 1查看 120关注 0票数 0

大家好,我是C编程的新手,我需要打开一个文件,读取它的内容,让程序记住它们,然后从那里提取关于employees.This的具体信息,看看文件是什么样子的:(有16个员工)

代码语言:javascript
运行
复制
Tremblay Alain A 35.0 35.5 
Vachon Jean P 40.0 22.75 
...
St-amour Flavie P 40.0 25.0 

我只需要让结果出现一次,但它出现了16次。我试图将printf (% d...,k)放在while之外,但它不起作用。

代码语言:javascript
运行
复制
#include <stdio.h>
struct employes 
{
  char nom[25];
  char prenom[25];
  char poste;
  float heures;
  float salaire;
};

int main()
{
   struct employes tab[16];
   FILE *fic;

   if ((fic = fopen("employes.txt","r"))== NULL)
   {
       printf("Error! opening file");
       exit(1);         /* Program exits if file pointer returns NULL. */
   }

   int choix;
   printf("1. Afficher le nombre de programmeurs qui travaillent plus de 45 heures / semaine \n"
          "2. Afficher le nombre d'opérateurs qui travaillent plus de 40.50 heures / semaine \n"
          "3. Afficher le nombre de secrétaires qui travaillent plus de 35.00 heures / semaine\n"
          "4. Sortir\n");
   scanf("%d",&choix);

   int ch;
   int i=0;
   int k=0;
   do
   {
   switch(choix)
   {
      case 1:  while ( (ch = fgetc(fic)) != EOF)
               {
                  fscanf(fic,"%s %s %c %f %f\n", tab[i].nom, tab[i].prenom, &tab[i].poste, &tab[i].heures, &tab[i].salaire);

                    if(tab[i].poste == 'P' && tab[i].heures >= 45.00)
                    k++;
                    printf(" %d programmeurs travaillent plus de 45.00 heures/semaine\n",k);
               }
               break;

      case 2:  while ( (ch = fgetc(fic)) != EOF)
               { 
                   fscanf(fic,"%s %s %c %f %f\n", tab[i].nom, tab[i].prenom, &tab[i].poste, &tab[i].heures, &tab[i].salaire);

                     if(tab[i].poste == 'O' && tab[i].heures>=40.50)
                     k++;
                     printf(" %d operateurs travaillent plus de 40.50 heures/semaine\n",k);
               } 
               break;

      case 3:  while ( (ch = fgetc(fic)) != EOF) 
               {
                   fscanf(fic,"%s %s %c %f %f\n", tab[i].nom, tab[i].prenom, &tab[i].poste, &tab[i].heures, &tab[i].salaire);

                     if(tab[i].poste == 'S' && tab[i].heures>=35.00)
                     k++;
                     printf(" %d secretaires travaillent plus de 35.00 heures/semaine\n",k);
               } 
               break;

     case 4: printf("Au revoir!\n"); 
             break;
     default: printf("Desole, choix invalide.");
              break;

    }
}while(choix!=4);
   fclose(fic);



   system("pause");
   return 0;

}

该程序打印以下内容:

代码语言:javascript
运行
复制
1. Afficher le nombre de programmeurs qui travaillent plus de 45 heures / semain
e
2. Afficher le nombre d'opÚrateurs qui travaillent plus de 40.50 heures / semain
e
3. Afficher le nombre de secrÚtaires qui travaillent plus de 35.00 heures / sema
ine
4. Sortir
1
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine
0 programmeurs travaillent plus de 45.00 heures/semaine

但我希望它只打印这一行一次。

EN

回答 1

Stack Overflow用户

发布于 2014-10-02 13:53:13

实际上,我没有运行你的程序,但我猜你的fscanf应该是fscanf(fic,“%s%s%c%f%f”,tabi.nom,tabi.prenom,&tabi.poste,&tabi.heures,&tabi.salaire);

linux手册页中fgets的原型是char *fgets(char *s,int size,FILE *stream);

所以我认为你的fgets函数应该是buff fgets(,40,),我找到的引用是http://linux.die.net/man/3/fgets

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26153519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档