试图让while循环工作,当输入符号而不是字符时会中断
Trying to get while loop to work which breaks when a symbol is inputted rather than a character
我正在尝试编写一个执行任务的程序,直到输入"*"。这是我到目前为止的代码:
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>
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 试图让while循环工作,当输入符号而不是字符时会中断
- 当提示输入整数值时输入字符时,为什么程序会中断
- 将布尔值转换为字符会产生错误和代码中断
- 无法根据字符提前中断用户输入?