【问题标题】:Program stops running after while loop程序在while循环后停止运行
【发布时间】:2016-06-20 11:05:10
【问题描述】:

所以,自从我上次用 C 编程以来已经有一段时间了,现在我正试图重新回到 C 语言,但我的程序遇到了问题。该程序非常简单,我使用 getchar 将字符存储在 char 数组中,但由于某种原因,程序在我的 while 循环后停止运行。

#include <stdio.h>
#define MAXLINE 1000

int main(){
    char c;
    char input[MAXLINE];
    int i = 0;

    while((c = getchar()) != EOF){
         input[i] = c;
         ++i;
    }
    printf("Still running");
}

所以,我的程序不会打印“Still running”。

【问题讨论】:

  • 会不会是输入多于MAXLINE(1000)个字符?
  • 另外,getchar 返回一个int。这其实很重要。
  • 如果char 未签名,则不会检测到EOF (-1),请使用int c,这是getchar 返回的内容。
  • EOF 是 int 类型,而不是 char。
  • 在 Windows 控制台中,Ctrl-Z 必须是换行符后的第一个字符

标签: c


【解决方案1】:

发送EOF(Ctrl+D for *nix Ctrl+Z for Win),它会显示Still running。

root@Linux-VirtualBox:~/program/progEdit# ./stktest.o 
sdf 
fdf 
sdf 
Still runningroot@Linux-VirtualBox:~/program/progEdit#

【讨论】:

    【解决方案2】:

    您的程序只能靠运气运行,因为 getchar 返回的是 int 而不是 char。原因是getchar 可能返回EOF,它不一定可以表示为char

    要修复此错误,您需要将char c 替换为int c

    【讨论】:

    • 是的,这是问题之一,但是仅这样做并不起作用,我还必须在输入输入后执行 Ctrl + Z。既然你提到了我的代码中的一个缺陷,我仍然会给你一个赞成票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2021-07-13
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多