试图让while循环工作,当输入符号而不是字符时会中断

Trying to get while loop to work which breaks when a symbol is inputted rather than a character

本文关键字:字符 中断 输入符号 while 循环 工作      更新时间:2023-10-16

我正在尝试编写一个执行任务的程序,直到输入"*"。这是我到目前为止的代码:

int main()
{
char character;
if (character != "*") {
scanf("%c", &character);
printf("ascii: %dn", 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 inputn");
exit(1);
}
if( character != '*'){
printf("ascii: %dn", 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>