简单C程序过早退出

简单C程序过早退出,c,C,我正在尝试创建一个C程序(我的第一个),它要求用户输入一个字符,只要该字符的ascii值不是0,它就会继续运行。然而,我的代码似乎从未到达while循环部分,并且总是在初始printf语句之后退出。我通过在while循环之前添加printf语句来确保循环没有问题,但它仍然没有执行 #include <stdio.h> int main(void) { char c; printf("Welcome to ASCII land: "); scanf("

我正在尝试创建一个C程序(我的第一个),它要求用户输入一个字符,只要该字符的ascii值不是0,它就会继续运行。然而,我的代码似乎从未到达while循环部分,并且总是在初始printf语句之后退出。我通过在while循环之前添加printf语句来确保循环没有问题,但它仍然没有执行

#include <stdio.h> 
 int main(void)
 {
    char c;

    printf("Welcome to ASCII land: "); 
    scanf("%c", &c);

    while((int)'c' != 0) { 
      printf("type in another char "); 
      scanf("%c", &c);
    }   
    printf("you're done");
    return 0;  
}
#包括
内部主(空)
{
字符c;
printf(“欢迎来到ASCII土地:”);
scanf(“%c”、&c);
而((int)'c'!=0){
printf(“输入另一个字符”);
scanf(“%c”、&c);
}   
printf(“你完成了”);
返回0;
}
while((int)'c'!=0){
可能应该是
while(c!='0'){

它最初的编写方式是将“c”转换为一个数字并与0进行比较。“c”实际上是值99,所以您说的是
,而(99!=0)


只需删除“c”中的引号,您就会遇到问题“如何输入ASCII 0(NUL)”?

在while条件检查中删除“c”中的单引号。您可能正在尝试执行
while((int)c!=“0”

  • while循环中的条件在逻辑上不正确,但根据您的问题,它在语法上是正确的。因为ascii 0对应于不可打印的字符,您无法从键盘输入。因此它将永远运行

  • 有时会发生跳过。请尝试第7行中的
    scanf(“%c”,&c);
    。注意%c之前的间隙


  • 我只看到无限循环的问题,因为((int)'c'!=0)


    这类似于
    while(99!=0)
    。我建议将其修改为
    ,而(c!='0')
    'c'
    是常量字符,
    c
    是变量。请注意区别。
    此外,您不能输入ascii值为0的字符。您只能输入可打印的字符,例如
    'a'
    'U'

    打字?删除
    `c`
    中的引号仍然存在同样的问题。老实说,我认为它甚至没有到达代码的那一部分,我复制了printf语句,如果您只需删除如果引用了“c”,则必须键入ASCII 0以结束循环(不是ASCII 48,它是0字符)。您可能需要在
    land:
    之后添加
    \n
    printf(“欢迎使用ASCII land:”)
    (或使用
    fflush()
    setbuf(stdout,0)
    。并将
    'c'
    修复为
    c
    。为什么不检查
    scanf
    的返回值?谢谢,但我认为这实际上是一个单独的问题。我的代码甚至没有到达循环的那一部分,它只输出“欢迎使用ascii land”并在我按enter键时退出,甚至没有打印“youre”不要分割在有或没有循环的情况下都能工作的部分工作退出或挂起?其中的任何内容都不应使其退出。退出。使用建议的while循环的代码,输出仍然欢迎ASCII land:e----------------(程序退出时代码为:0)按return继续。我的编辑器似乎有问题,我从终端运行了它,它工作了,谢谢你的帮助!我认为geany与C不兼容,是吗?不知道。我不使用它,但你似乎已经自己回答了;-)