切换小程序不让我输入选项

时间:2012-03-25 07:41:59

标签: c switch-statement

我正在学习C,我正在练习开关,我运行程序,但不允许我输入*,+, - ,这是我的代码。在输入程序完成的数字后,我可以输入第1和第2个数字但不输入运算符。不知道为什么。谢谢

#include <stdio.h>

int main(int argc, char *argv[])
{
int num1, num2, ans=0;
char ch, name;

printf("Enter a value: ");
scanf("%d",&num1);

printf("Enter a second value: ");
scanf("%d",&num2);

printf("Input * To multiply\
              + To add\
              - To subtract");
scanf("%c",&ch);

switch(ch)
{
case'*':
    ans=num1 * num2;
    printf("%d times %i equals: %i",num1,num2,ans);
    break;

case'+':
    ans=num1+num2;
    printf("%i plus %i equals: %d",num1,num2,ans);
    break;

case'-':
    ans=num1-num2;
    printf("%d minus %d equals: %d",num1,num2,ans);
    break;

default:
    printf("Range numbers");
}
return 0;
}

2 个答案:

答案 0 :(得分:2)

此:

scanf("%c",&ch);

正在阅读num2条目中的换行符:在阅读ch之前,您需要跳过它。

更改为:

scanf(" %c", &ch);

%c指示scanf之前添加空格以跳过换行符和空格。

答案 1 :(得分:1)

这是因为您使用的scanf("%d")不是面向行的函数。它只读取数字,但将换行符留在缓冲区中,然后由scanf("%c")调用读取。

由于您希望执行基于行的输入,因此您可能希望使用fgetsatoi来获得更明确且一致的行为。 fgets函数始终读取一行。例如,像这样:

char buf[1024];

printf("Enter a value: ");
fgets(buf, sizeof(buf), stdin);
num1 = atoi(buf);

/* ... */

printf("Enter operator: ");
fgets(buf, sizeof(buf), stdin);
ch = buf[0];