C 程序在给出正确的输出后不会结束

Fra*_*nha 3 c while-loop

所以我正在尝试做一个程序来读取由空格和新行分隔的数字序列。输出应该是相同的序列,但删除不必要的零(字符序列 'EOF' 结束程序)。每个例子

  1. 01492 102934 应该是 1492 102934
  2. 9312 0 01923 应该是 9312 0 1923
  3. 0001249 0000 应该是 1249 0

好吧,我已经实现了这个目的,但遇到了一个障碍。除非我输入 EOF 序列,否则程序不会退出。也许是因为我有一段时间(1)在运行,导致无限循环。但是当我尝试删除它时,程序甚至根本不打印。我还在学习这是一个学校项目。任何帮助将不胜感激!

这是代码:

#include <stdio.h>
int main(){
char c;
int i=0;
while(1){
    c=getchar();
    if (i==0){
        if(c=='0'){
            while (c=='0'){
            c=getchar();
            }
        }
        printf("%c",c);
        i=i+1;
    }
    else if (c==' '){
        printf("%c",c);
        c=getchar();
        if(c=='0'){
            while (c=='0'){
            c=getchar();
            }
        }
        printf("%c",c);
    }
    else if (c=='E'){
        c=getchar();
        if (c=='O'){
            c=getchar();
            if(c=='F'){
                printf("\n");
                return 0;
            }
        }
    }
    else{
        printf("%c",c);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

pmg*_*pmg 5

重要的东西:

int c; // IMPORTANT, cannot be char
while (1) {
    c = getchar();
    if (c == EOF) break; // exit loop
    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • `int` 非常重要,因为使用 `char` 您无法区分有效字符和 `EOF` 信号。假设 8 位...`getchar()` 返回有效字符的正值(0 到 255)或信号的 `EOF`(负值,通常为 `-1`)。当将此“int”值/信号转换为“char”时,有效字符 255 会转换为“-1”,或者信号“-1”会转换为字符“255”(取决于您的中“char”的符号)执行)。 (2认同)