scanf使用空格获取两行输入
例如,请查找下面的代码scanf使用空格获取两行输入,c,scanf,C,Scanf,例如,请查找下面的代码 main() { int i; char s[100]; printf("Enter the string \n"); scanf(" %s ",s); printf("Enter the string\n"); scanf("%d",&i); printf("%s\n%d\n",s,i); } 以上代码的输出是 Enter the string hai hai Enter the string hai
main()
{
int i;
char s[100];
printf("Enter the string \n");
scanf(" %s ",s);
printf("Enter the string\n");
scanf("%d",&i);
printf("%s\n%d\n",s,i);
}
以上代码的输出是
Enter the string
hai
hai
Enter the string
hai
0
它应该接受一行输入,但也接受第二行输入。如果删除scanf中的空格,则输出正确 有人能解释一下吗
当使用整数(%d)时,它不会发生。这是在字符串中发生的。我们的第一次扫描等待一个字符串,该字符串在Beggining处包含一个空格,但它不存在。因此,它要求您再次输入字符串,并且在第二次输入时被接受,因为您在输入新字符串之前键入[enter]。[输入]在scanf中被视为空白 参考这个链接,看起来是一样的
您的第一个
scanf
请求一个字符串,并将跳过前导空格。您的第二个
scanf
请求一个整数
当您输入“hai”
时,它进入s[]
。与“hai”
相同,只保留“hai”
当您输入
“jai”
时,它被解析为int
,因此为零
除了第二个printf
应该是
printf("Enter an integer\n");
从scanf()
的手册页:
一系列空白字符(空格、制表符、换行符等;请参阅
空间(3))。此指令匹配任意数量的空白,
在输入中包括无
当格式字符串中有空格时,它会跳过输入中任何数量的空格字符。那就是说你
必须输入非空白字符,以便继续读取字符串s
在C/POSIX语言环境中,空白字符可以是:
空格、换行符('\f')、换行符('\n')、回车符('\r'),
水平选项卡('\t')和垂直选项卡('\v')
“%s”中不应有空格 这个句子出现两次的原因是你写了两次
main()
{
int i;
char s[100];
printf("Enter the string \n");
scanf("%c", &s);
fgets(s, 100, stdin);
printf("Enter the string\n");
scanf("%d",&i);
printf("%s\n%d\n",s,i);
}
fgets
会使c
获得许多字符。它会询问两次,因为有两个printf
的“输入字符串”
,当然。有两个printf()
在询问,这就是为什么它会询问两次?(除非我有误解)。格式说明符中的前导空格指示scanf()
跳过前导空格。可能与%c
重复的字符用于读取单个字符。fgets
将使其成为多个字符。在scanf(“%c”,…)之后使用fgets实际上不是一个好做法