0

我正在编写代码,我需要使用循环。我正在从如下所示的文件 (data.txt) 中读取数据:

IMPORT 450

EXPORT 200

IMPORT 100

等等。

这是我遇到问题的代码段

inputfile = fopen("c:\\class\\data.txt","r");
fscanf(inputfile,"%s %f", &transaction, &amount);

do{                 
     total += amount;             
     printf("Data %s  %f   %f\n", transaction, amount, total);
     fscanf(inputfile, "%s", &transaction);

}while (transaction == "IMPORT" || transaction == "EXPORT");

当我添加一个 printf 行来检查什么是“事务”时,它会显示 IMPORT,所以我不确定为什么 do-while 循环不重复。

谢谢!

4

4 回答 4

4

假设transaction是一个char数组,比较

transaction == "IMPORT"

会将 的地址transaction与字符串文字的地址进行比较"IMPORT"

你需要使用

while (strcmp(transaction, "IMPORT") == 0 ||
       strcmp(transaction, "EXPORT") == 0)

比较 C 中的字符串。

于 2013-05-05T19:17:35.123 回答
1

什么类型transaction

为了将它与fscanf'%s运算符一起使用,它可能是char[],在这种情况下,您需要使用strcmp; 运算符==将比较字符指针地址,而不是内容。

于 2013-05-05T19:18:16.383 回答
0

大概是这样

    while(2==fscanf(inputfile,"%s %f", transaction, &amount)){
        if(strcmp("IMPORT", transaction)==0)
            total += amount;
        else if(strcmp("EXPORT", transaction)==0)
            total -= amount;
        else
            break;
        printf("Data %s  %f   %f\n", transaction, amount, total);
    }
于 2013-05-05T19:44:30.740 回答
0

当您尝试检查事务 == "IMPORT" C 仅比较第一个字符的指针。这确实很好用。也许试试这个代码:

int str_equal(char* str1, char* str2)
{
    int i, len;

    if ((len = strlen(str1)) != strlen(str2))
    {
        return 0;
    }

    for (i = 0; i < len; i++)
    {
        if (toupper(str1[i]) != toupper(str2[i]))
    {
            return 0;
        }
    }

    return 1;
}
于 2013-05-05T19:22:51.420 回答