虽然循环没有以'\ 0'结尾

时间:2014-10-18 00:23:50

标签: c loops while-loop character

这是一个从文件中逐个字符读取的函数,然后将字符串转换为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);
}

2 个答案:

答案 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'是奇怪的;寻找分隔符更常见,例如在数字后面的空格(或任何其他非数字)。