关于C#:scanf char变量之间的scanf整数变量不起作用?

scanf char variable in between scanf integer variable doesn't work?

本问题已经有最佳答案,请猛点这里访问。

我曾想过要制造一个计算器,它只是一个简单的带有循环和基本操作的计算器,但奇怪的是,我的scanf之间的数字字符scanf被忽略了。 如果我将它放在整数的scanf上,它会很好地工作,但看起来却不像计算器。 有什么办法解决这个问题? 还没结束 到这里为止都有错误,所以想知道哪里出了问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

int main(){
    int number1,number2,total;
    char a;
    printf("This is your personal calculator:(End with""="")\
"
);

    scanf("%d",&number1);
    scanf("%c",&a);
    scanf("%d",&number2);

    if (a == 'x' || a == 'X' || a == '*'){
        total=number1*number2;
        printf("%d",total);
    } else if (a == '/'){
        total=number1/number2;
        printf("%d",total);
    } else if (a == '+'){
        total=number1+number2;
        printf("%d",total);
    } else if (a == '-'){
        total=number1-number2;
        printf("%d",total);
    } else {
        printf("error");
    }

    system("pause");
    return 0;
}


您应该每次都测试是否从scanf()获得了一个值。

%c字符读取第一个数字之后的空白或换行符;在读取字符之前,将" %c"与前导空格一起使用可跳过可选的空白。

1
2
3
4
5
6
7
8
9
10
if (scanf("%d", &number1) == 1 &&
    scanf(" %c", &a) == 1 &&
    scanf("%d", &number2) == 1)
{
    ...process possibly valid input...
}
else
{
    ...diagnostics...
}

如果使用fgets()读取整行并使用sscanf()解析它们,则可能会更容易给出良好的诊断。

  • 建议1:举例说明您键入什么作为输入以及获得什么作为输出。这使人们可以更轻松地为您提供帮助(他们可以判断程序是否为他们产生了相同的输出)。
  • 建议2:回显您的输入,以便可以看到程序得到了什么。这使您可以判断程序是否获得了预期的输入。例如,您可能会发现number2没有包含预期的内容。
  • 建议3:将number1number2初始化为-1,这样您就可以看到scanf()何时失败(因为您尚未检查scanf()是否成功)。

问题是由于scanf遗留下了换行char \
。可以通过在格式说明符%c之前放置一个空格来避免这种情况。

试试这个

1
2
scanf(" %c", &a);  
       ^ An space

这将帮助您吃掉第一个scanf剩余的\
字符


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
int main()

{

int number1,number2,total;
char a;
printf("This is your personal calculator:(End with""="")\
"
);

scanf("%d",&number1);

fflush(stdin); // SIMPLE WAY FLUSH THE INPUT STREAM, INPUT BUFFER IS USUALLY CLEARED.
scanf("%c",&a);

scanf("%d",&number2);

if (a == 'x' || a == 'X' || a == '*'){
    total=number1*number2;
    printf("%d",total);
} else if (a == '/'){
    total=number1/number2;
    printf("%d",total);
} else if (a == '+'){
    total=number1+number2;
    printf("%d",total);
} else if (a == '-'){
    total=number1-number2;
    printf("%d",total);
} else {
    printf("error");
}

system("pause");
return 0;

}