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
0

它应该接受一行输入,但它也接受第二行。
如果删除 scanf 中的空格,则输出正确。

谁能解释一下吗?

当将相同的值与整数(%d)一起使用时,它不会发生。它发生在字符串上。

最佳答案

我们的第一个 scanf 等待一个开头包含空格的字符串,但它没有。因此它会要求您再次输入字符串,并且第二次会被接受,因为您在输入新字符串之前输入了 [enter]。 [enter] 在 scanf 中被视为空格。

引用这个链接,看起来是一样的

Explain what is difference between without whitespace in scanf and with whitespace in scanf?

关于c - scanf 获取带有空格的两行输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705218/

相关文章:

c - 为什么我不能访问这个 void 类型数组的第二个元素

c - 如何正确使用 sscanf?

c - C 中的 Scanf 导致奇怪的控制台行为?

c - 异常: Access Violation when trying to use fscanf()

c - 这段代码中段错误的原因

c - 将 malloc() 与二维数组一起使用,未得到预期结果

c - "free functions"在C通用数据结构实现中的作用

c - 我在链接中提供了以下图像代码。在 n=2 之后,我无法迭代空格,请引导我完成它

c++ - IP到长转换c++

c - scanf 忽略,无限循环