gpt4 book ai didi

c - 为什么输入(换行)不会退出scanf?

转载 作者:行者123 更新时间:2023-12-01 11:52:32 24 4
gpt4 key购买 nike

程序如下:

#include "stdio.h"

int main()
{
int minx, x, y, z;

printf("Enter four ints: ");
scanf( "%i %i %i %i", &minx, &x, &y, &z);

printf("You wrote: %d %d %d %d", minx, x, y, z);
}

假设我输入如下:1 2 3 4(然后按 enter)。scanf() 运行并读取输入缓冲区 = 1 (space) 2 (space) 3 (space) 4 (space)(\n)它读取直到 (\n) 并且\n 将保留在缓冲区中。

如果我输入如下: 1(然后按enter) 2(然后按enter) 3(然后按enter) 4 (然后按 enter)。scanf() 运行并读取输入缓冲区 = 1(\n)2(\n)3(\n)4(\n)(\n)。

在这两种情况下,scanf() 会跳过换行符、空格并尝试读取 int

但是如果我输入 1(然后按 enter)(然后按 enter)... scanf() 则永远不会运行,如果我一直按 enter

我的问题是:是什么触发了 scanf()?它只会在知道所有正确的 %d 都放在缓冲区中然后在用户按 enter 时运行后运行吗?

最佳答案

因为 scanf() 会忽略空格,而空格包含换行符。

scanf() 每次都以相同的方式处理这四个数字:跳过空白,然后读取看起来像数字(因此是符号和数字)的候选序列,并在 处停止读取不能成为候选序列一部分的第一个字符;然后它转换候选序列(溢出时的行为等未定义)。如果您在 4 之后键入一个空格(而不仅仅是一个换行符),空格和换行符仍将等待接下来读取。如果没有空间,则换行符将等待读取。

如果您键入非数字字符(标点符号或字母),则 scanf() 将返回错误(或转换的数字少于 4 个——除非字母在第四个数字之后) .

当您键入一个数字后跟任意数量的换行符时,您只是在给 scanf() 空格以供跳过。它不会停止,直到它收到 EOF(读取零字节)或读取错误(或转换错误,例如字母或标点字符而不是数字)。

关于c - 为什么输入(换行)不会退出scanf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com