【发布时间】: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。