gpt4 book ai didi

c++ - 尝试让 while 循环工作,当输入符号而不是字符时,该循环会中断

转载 作者:行者123 更新时间:2023-11-30 20:09:54 26 4
gpt4 key购买 nike

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

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com