gpt4 book ai didi

c - scanf() 的返回值

转载 作者:太空宇宙 更新时间:2023-11-04 04:31:04 25 4
gpt4 key购买 nike

这是我的代码,用于重复从用户那里读取三个由空格分隔的变量。输入格式应为“char int int”(例如 b 3 3 )。我使用 scanf 函数的返回值来确保输入恰好是三个变量。

#include <stdio.h>

int main(void){
int x, y, nargs;
char command;

while(1){
nargs = scanf("%c %d %d", &command, &x, &y);
printf("%d\n",nargs);

if(nargs != 3){
printf("error\n");
break;
}
}
return 0;
}

输入和输出:

g 4 4
3
b 3 3
1
error

第一行输入没问题。但是当我输入第二行时,它显示 scanf() 只从这一行读取一个变量。我的代码有什么问题?

最佳答案

问题是 \n 换行符隐藏在您发送到标准输入的两个输入行之间。在第一个 scanf 之后,你有一个 '\n' 在输入流上挂起,然后你追加 "b 3 3" 所以整个缓冲区看起来像 "\nb 3 3"

然后再次调用 scanf 并将 \n%c 匹配,在 scanf 需要空格之后缓冲区有 'b',因此在将 \n 分配给 command 后失败。

你可以尝试匹配

nargs = scanf("%c %d %d ", &command, &x, &y);
^

这样换行符就被前面的 scanf 吃掉了,来自 cppreference :

any single whitespace character in the format string consumes all available consecutive whitespace characters from the input

关于c - scanf() 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167194/

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