请找到以下代码,例如
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)时,它不会发生。这是用字符串发生的。
答案 0 :(得分:1)
我们的第一个scanf等待一个包含空格的字符串,但是没有。所以它要求你输入字符串并在第二次被接受,因为你在输入新字符串之前键入[enter]。 [enter]在scanf中被视为空格。
请参阅此链接,它似乎相同
Explain what is difference between without whitespace in scanf and with whitespace in scanf?
答案 1 :(得分:1)
您的第一个scanf
要求输入一个字符串,并且会跳过前导空格
您的第二个scanf
要求提供 整数 。
当您输入"hai"
时,它会进入s[]
。它与" hai"
相同,只保留"hai"
当您输入"jai"
时,它会被解析为int
,从而为您提供零。
除了第二个printf
printf("Enter an integer\n");
答案 2 :(得分:1)
来自scanf()
的手册页:
一系列空格字符(空格,制表符,换行符等;请参阅 isspace为(3))。该指令匹配任意数量的空白区域, 包括无,在输入中。
如果格式字符串中有空格,则会跳过输入中的任意数量的空白字符。这意味着你
必须输入非空格字符,以便继续读取字符串s
。
在C / POSIX语言环境中,空格字符可以是:
空格,换页('\ f'),换行符('\ n'),回车符('\ r'), 水平制表符('\ t')和垂直制表符('\ v')。
答案 3 :(得分:0)
“%s”中不应有空格 判刑两次的原因是你写了两次
答案 4 :(得分:-1)
试
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
获得许多字符。