使用开关对文件中的信息进行排序 (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)