繁体   English   中英

我不明白为什么我无法在c中获得三个输入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM