循环不识别C中的字符串

时间:2013-05-05 19:14:57

标签: c loops char

我正在编写代码,我需要使用循环。我正在从文件(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行来检查'transaction'是什么时它会显示IMPORT,所以我不确定do-while循环为什么不重复。

谢谢!

4 个答案:

答案 0 :(得分:4)

假设transactionchar数组,则比较

transaction == "IMPORT"

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

您需要使用

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

比较C中的字符串。

答案 1 :(得分:1)

transaction是什么类型的?

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

答案 2 :(得分: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;
}

答案 3 :(得分: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);
    }