繁体   English   中英

While循环不以'\\ 0'结尾

[英]While loop not terminating with '\0'

该功能可以从文件中逐个字符地读取字符,然后将其转换为浮点数,但是当读取“ / 0”时,while循环不会终止。

GSF555“气体过滤器-福特护航” 64.50 9 <-这是从“ 64.50”中读取的内容

PKL070“公园镜头-丰田卡罗拉” 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所在的位置我不确定,但是我可以看到一些问题。

首先,fgetc返回一个整数,而不是一个字符。 这对于测试文件结尾可能很重要,因为EOF是值为-1的整数,而不是通常取值为0-255的字符。 您可以将ch的声明更改为int而不是char。 (不用担心,这不会影响使用%c的ch的打印。)

另外,如果您尝试通过用\\ 0进行测试来检测行尾,则它可能不起作用。 行尾是换行符\\ n。 根据底层操作系统的不同,此字符可能是两个字符,而不是一个字符。 如果将ch声明为int,则应该能够将其与换行符进行比较,但是如果您将ch保留为char,则可能无法正常工作,如果您要这样做的话。

当读取“ / 0”时,while循环不会终止。

没有“ / 0”这样的东西(对于助听器,禁止多字节字符),并且“ \\ 0”是NUL,而“ 0”是零位。 因此,用“ 0”替换程序中的“ \\ 0”。 尽管寻找'0'很奇怪; 寻找分隔符,例如数字后面的空格(或其他任何非数字),这种情况更为常见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM