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

标签 c++ c

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

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/

相关文章:

c - 获取指向字符串常量的指针

c - 如何删除C语言中字符串(字符数组)中的所有数据?

c++ - 在 Darwin/OSX 中以编程方式确定进程信息

c++ - 在 C++ 中制作 QPushButton

c - C 编程中 hash(#) 的语法复杂化

iphone - FFmpeg:与audioqueue的音频同步

C++ 简单的从二进制转换为十进制

c++ - 从 C++ 启动程序,与管道交换信息,然后共享内存

c++ - GNU GCC 编译器更新

c - FTP over tcp/ip atmega 8 位微 Controller 的分段和重组