我正在尝试编写一个程序来执行任务,直到输入“*”为止。这是到目前为止我的代码:
int main()
{
char character;
if (character != "*") {
scanf("%c", &character);
printf("ascii: %d\n", character);
}
else{
printf("Goodbye");
}
}
但是当我运行它并输入“*”时,它不会打印再见,它只会打印正常的 ASCII 值。我还是 C 语言新手。
最佳答案
character != "*"
将会
character != '*'
但此外,您正在使用未初始化的值。您应该在进行比较之前对其进行初始化。
#include<stdio.h>
#include<stdlib.h>
int main(void){
char character;
if(scanf("%c", &character) != 1){
fprintf(stderr,"Error in input\n");
exit(1);
}
if( character != '*'){
printf("ascii: %d\n", character);
}
else {
printf("Goodbye");
}
return 0;
}
第一个if
检查使用scanf
输入是否成功。这将检查是否输入了字符以及是否将其分配给character
。对于像 1234
这样的输入,它将获取 1
作为输入,然后其余部分将保留在标准输入中。 scanf
解析 stdin
中的字符。一旦它得到它,它就会停止,消耗这里的输入1
并将其他所有内容留在stdin
中。
同时启用所有编译器警告
gcc -Wall -Werror progname.c
之前您也将地址与 ascii 值进行比较。 "a"
与 'a'
不同。文字字符串基本上是数组,它退化为指向数组第一个元素的指针,即 'a'
。你可以尝试一下,它会起作用。(不是好的做法)。
if( character != "*"[0]){
"*"[0]
基本上是访问第 0 个元素,即 'a'
。
op问输入怎么会失败?
如果输入中出现EOF
,那么它将失败。(其中一种方式)
>>> touch emptyfile.txt
>>> gcc -Wall -Werror prog.c
>>> ./a.out < emptyfile.txt
Error in input
或者只是这样做
>>> gcc -Wall -Werror prog.c
>>> ./a.out
<Press Ctrl-D>
关于c++ - 尝试让 while 循环工作,当输入符号而不是字符时,该循环会中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48124055/