这是一个从文件中逐个字符读取的函数,然后将字符串转换为float,但是当读取'/ 0'时,while循环不会终止。
GSF555“气体过滤器 - 福特Escort”64.50 9< - 这是从“64.50”读到的内容PKL070“Park Lens - Toyota Corolla”36.50 8
while循环超过'/ 0'并且还读取“9”和下一行数据中的字符。
我只是printf
看看出了什么问题。
float getPrice(FILE * in){
char ch;
int i = 0;
char str[10];
ch = fgetc(in);
printf("INDEX + NUMBER = %d %c\n", i, ch);
if(ch == '\0')
ch = fgetc(in);
str[i++] = ch;
while(ch != '\0' && i < 10){
str[i++] = ch;
printf("Index I = %d\n", i);
ch = fgetc(in);
printf("3 %c\n",ch);
}
printf("STRING = %s\n", str);
return atof(str);
}
答案 0 :(得分:2)
我不确定我在你的帖子里看到的是你所指的是什么,但是我可以看到一些问题。
首先,fgetc返回一个整数,而不是一个字符。这对于测试文件结尾很重要,因为EOF是一个值为-1的整数,而不是通常取值为0-255的字符。您可以将ch的声明更改为int,而不是char。 (别担心,这不会影响带有%c的ch的打印。)
此外,如果您尝试使用\ 0进行测试来检测行尾,则可能无法正常工作。行尾是新行,\ n。根据底层操作系统,这可能需要两个字符,而不是一个字符。您应该能够将ch(如果声明为int)与换行符进行比较,但如果将ch保留为char,则可能无效,如果这是您要执行的操作。
答案 1 :(得分:1)
当读取'/ 0'时,while循环不会终止。
没有'/ 0'这样的东西(禁止多字节字符,对于教练),'\ 0'是NUL而'0'是零数字。所以用'0'替换程序中的'\ 0'。虽然寻找'0'是奇怪的;寻找分隔符更常见,例如在数字后面的空格(或任何其他非数字)。