我正在编写代码,我需要使用循环。我正在从文件(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循环为什么不重复。
谢谢!
答案 0 :(得分:4)
假设transaction
是char
数组,则比较
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);
}