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