[英]I don't understand why I can't get three inputs in c
我的一个朋友正在尝试学习c(独自一书),有时她寻求帮助。
她只是给我看了我无法回答的东西。 我很as愧,但是我在大学学习了C语言,然后才转向php。 我真的很困,所以我想知道为什么我们不能得到三个输入。 这是部分代码:
#include <stdio.h>
int main()
{
int num1;
int num2;
char x;
printf("Enter a number:\n");
scanf("%d\n",&num1);
printf("Enter another number:\n");
scanf("%d\n",&num2);
printf("Choose an operation sign:\n");
scanf("%c\n",&x);
...
像这样,它要求两次输入第一次,就像这样:
Enter a number:
1
2
Enter another number:
3
Choose an operation sign:
-
如果我删除\\n
它将跳过最后一个scanf
。
你能帮我理解为什么吗?
在这里阅读: scanf()将新行char留在缓冲区中?
解:
int main()
{
int num1;
int num2;
char x;
printf("Enter a number:\n");
scanf("%d",&num1);
printf("Enter another number:\n");
scanf("%d",&num2);
printf("Choose an operation sign:\n");
scanf("\n%c",&x); /* See the \n <---------------- */
}
替代:
char buf[2]; /* We need 2 characters for the null */
scanf("%1s", buf); /* We ask max 1 character (plus null given by scanf) */
char x = buf[0]; /* We take the first character */
作为一个小提示,由于scanf
工作原理,使用这两种解决方案,您都可以将所有数据直接插入第一个“输入”中,而各种scanf
都将发挥作用。 因此,您可以插入123 234 +
,它将正确地分成三个变量。
是的, scanf
不会删除换行符,并且您无法刷新stdin
,因此如何处理:
int num1;
char nleater;
printf("Enter a number:\n");
scanf("%d%c", &num1, &nleater);
或实际上是这样的:
printf("Enter number sign number: ");
scanf("%d %c %d",&num1,&x,&num2);
printf("%d %c %d", num1, x, num2);
您也可以尝试使用fflush
,但这取决于库的实现(stdio)。 它的C参考可以在这里找到。
稍后我将对其进行测试,并更新我的帖子,并说一说是否可行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.