gpt4 book ai didi

c - 打印问题

转载 作者:行者123 更新时间:2023-11-30 17:28:04 26 4
gpt4 key购买 nike

嗨,我对 C 编程相当陌生,我需要打开一个文件,读取其内容,使程序记住它们,并从那里提取有关员工的具体信息。文件如下所示:(有 16 名员工)

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 之外,但它不起作用。

#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;

}

程序打印如下:

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

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

最佳答案

这一行,fscanf“%s %s %c %f %f”的格式应该添加一个'\n',因为每个新项目之前都有新行。所以也许格式“%s %s %c %f %f\n”是正确的。

当你读取字符串时,不要使用 &

fscanf(fic,"%s %s %c %f %f", &tab[i].nom, &tab[i].prenom, &tab[i].poste, &tab[i].heures , &tab[i].salaire);

应该是

fscanf(fic,"%s %s %c %f %f\n", tab[i].nom, tab[i].prenom, &tab[i].poste, &tab[i] .heures, &tab[i].salaire);

关于c - 打印问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com