C编程,scanf()函数

问题描述 投票:0回答:1

scanf是否在其缓冲区或输入流中放置了空格?如果我说

scanf("%c %d %d", &character, &num1, &num2);

现在说

scanf("%c", &char2);

我知道输入将保留在缓冲区但是空间计数?

scanf("%c%d%d", &character, &num1, &num2);

这与第一部分有什么不同。

还有一件事。用户按下后,我可以以某种方式打破scanf。如果它在num1之后按下输入为ex。输入:i 5

即使它还在等待一次输入,我能否以某种方式使scanf在此之后停止?

c gcc scanf stdin ansi
1个回答
3
投票

格式字符串scanf中的空格将占用任何空格(如果有的话);格式说明符%d也将忽略实际数字之前的任何空格。因此," %d""%d"具有相同的效果。格式说明符%c不会忽略空格而是读取它们,因此" %c"将与"%c"不同。在你的情况下,%c位于scanf("%c %d %d", ...)格式字符串的开头,与scanf("%c%d%d", ...)具有相同的效果。

如果你想在输入所有内容之前允许退出,我建议使用fgets读取完整的“行”,然后相应地解析输入,例如使用sscanfstrtok

© www.soinside.com 2019 - 2024. All rights reserved.