【问题标题】:Scanf reading an entire string when I told her to only read the first character当我告诉她只读取第一个字符时,scanf 读取了整个字符串
【发布时间】:2022-11-24 03:55:07
【问题描述】:
#include <stdio.h>

int main(){
    
    while(1){

        char a;
        scanf("%1c",&a);
        getchar();
        if (a=='a'){
            printf("It is a.");
        }

    }
    
}

我告诉 scanf:“读取用户给你的任何内容的第一个字符”,她说“是的,主人”,但是如果我输入字符串“aaaaaaaaaaaaaaaaaaa”,我得到输出:

它是一个。它是一个。它是一个。它是一个。它是一个。它是一个。它是一个。它是一个。它是一个。它是一个。它是一个。它是a. 这是一个。

%1c 不是意味着它会丢弃字符串的其余部分吗?作为奖励,在我得到那么长的输出后,我继续输入 a 但它什么也没做。这个该死的命令到底有什么问题?

【问题讨论】:

  • 不,%1c 并不意味着丢弃字符串的其余部分。
  • 不过,你对scanf 的看法没有错:正如有人在多年前在Usenet 上写道,“scanf 是一个非常苛刻的情妇,行为举止像个恶毒的小妓女,只会和你的朋友睡觉,让你难堪当着你父母的面。”
  • 不要尝试使用 scanf 来读取单个字符。这不是它的目的。使用它可以轻松读取单个整数或单个浮点数,或者可能是简单的字符串(不包含空格)。任何其他事情往往比它的价值更麻烦。另见these guidelines

标签: c scanf


【解决方案1】:

在这个while循环中

while(1){

    char a;
    scanf("%1c",&a);
    getchar();
    if (a=='a'){
        printf("It is a.");
    }

}

在循环的第一次迭代中,第一次调用 scanf 读取输入字符串的第一个字符“a”。然后调用 getchar 跳过输入字符串的第二个字符,然后在循环的下一次迭代中,第一次调用 scanf 读取输入字符串的第三个字符“a”。

看来您需要的是以下内容

while(1){

    char a;
    scanf("%c",&a);
    while ( getchar() != '
' );
    if (a=='a'){
        printf("It is a.");
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    相关资源
    最近更新 更多