使用开关对文件中的信息进行排序 (C)
Using a switch to sort information from File (C)
因此,当 运行 带有 switch 语句的代码出现无限循环,但当我将其注释掉时却没有出现,所以我知道问题出在其中。基本上,我必须从文件中获取一个 char 和 float 的列表,例如:
S 15.42
G 28.00
S 56.50
H 90.00
H 10.40
S 67.90
0
我需要根据每个char对应的组织(s=救世军等)对总数进行排序和相加。这是我的完整代码:
#include <stdlib.h>
#include <stdio.h>
int main(){
float amount,goodTotal,habTotal,salTotal,totalTotal;
char org[1],S,H,G;
FILE *input, *output;
input = fopen("input.txt","r");
output = fopen("output.txt","w");
if (input == NULL){
fprintf(stderr, "Can't open input file input!\n");
exit(1);
}
while(fscanf(input, "%c %f", org, &amount)!=EOF){
switch (org){
case 'S':
salTotal += amount;
break;
case 'H':
habTotal += amount;
break;
case 'G':
goodTotal += amount;
break;
}
fprintf(output,"Charity Number of Donations Total Donation \n");
fprintf(output,"-----------------------------------------------------\n");
fprintf(output,"Goodwill num $%f\n",goodTotal);
fprintf(output,"Habitat for Humanity num $%f\n",habTotal);
fprintf(output,"Salvation Army num $%f\n",salTotal);
fprintf(output,"-----------------------------------------------------\n");
fprintf(output,"Total num $%f\n",totalTotal);
}
system("pause");
return 0;
}
非常感谢任何帮助!此外,最后几行中的文本 "num" 是每个 "donation" 的编号的占位符 - 我只是还没抽出时间写代码。
替换
while(fscanf(input, "%c %f", org, &amount)!=EOF)
有
while(fscanf(input, "%c %f", org, &amount)== 2)
{
fgetc(input); //Consume New line char
fscanf
returns 扫描的输入数。
正如其他人正确指出的那样
使用switch (org[0]){
替换
switch (org){
和
switch (org[0]){
或者更好的是,将 org
设为 char
并使用
fscanf(input, "%c %f", &org, &amount)
因此,当 运行 带有 switch 语句的代码出现无限循环,但当我将其注释掉时却没有出现,所以我知道问题出在其中。基本上,我必须从文件中获取一个 char 和 float 的列表,例如:
S 15.42
G 28.00
S 56.50
H 90.00
H 10.40
S 67.90
0
我需要根据每个char对应的组织(s=救世军等)对总数进行排序和相加。这是我的完整代码:
#include <stdlib.h>
#include <stdio.h>
int main(){
float amount,goodTotal,habTotal,salTotal,totalTotal;
char org[1],S,H,G;
FILE *input, *output;
input = fopen("input.txt","r");
output = fopen("output.txt","w");
if (input == NULL){
fprintf(stderr, "Can't open input file input!\n");
exit(1);
}
while(fscanf(input, "%c %f", org, &amount)!=EOF){
switch (org){
case 'S':
salTotal += amount;
break;
case 'H':
habTotal += amount;
break;
case 'G':
goodTotal += amount;
break;
}
fprintf(output,"Charity Number of Donations Total Donation \n");
fprintf(output,"-----------------------------------------------------\n");
fprintf(output,"Goodwill num $%f\n",goodTotal);
fprintf(output,"Habitat for Humanity num $%f\n",habTotal);
fprintf(output,"Salvation Army num $%f\n",salTotal);
fprintf(output,"-----------------------------------------------------\n");
fprintf(output,"Total num $%f\n",totalTotal);
}
system("pause");
return 0;
}
非常感谢任何帮助!此外,最后几行中的文本 "num" 是每个 "donation" 的编号的占位符 - 我只是还没抽出时间写代码。
替换
while(fscanf(input, "%c %f", org, &amount)!=EOF)
有
while(fscanf(input, "%c %f", org, &amount)== 2)
{
fgetc(input); //Consume New line char
fscanf
returns 扫描的输入数。
正如其他人正确指出的那样
使用switch (org[0]){
替换
switch (org){
和
switch (org[0]){
或者更好的是,将 org
设为 char
并使用
fscanf(input, "%c %f", &org, &amount)