【问题标题】:Why is getchar() being skipped? [duplicate]为什么 getchar() 被跳过? [复制]
【发布时间】:2015-05-06 09:24:34
【问题描述】:

这是我正在处理的下面的代码。输出是这样的:

Enter Nums: 20 4
OP: Which option was that?

op = getchar(); 部分被完全忽略。为什么?
我正在使用 gcc 4.6.2 MinGW。


#include <stdio.h>
int add(int num1, int num2) {
    return num1 + num2;
}

int subs(int num1, int num2) {
    return num1 - num2;
}

int mul(int num1, int num2) {
    return num1 * num2;
}

float div(int num1, int num2) {
    return (float)num1 / num2;
}

int main(int argc, char* argv[]) {
    int num1, num2;
    char op;
    fprintf(stdout,"Enter Nums: ");
    scanf("%d %d",&num1,&num2);
    fprintf(stdout, "OP: ");
    op = getchar();
    switch(op) {
    case '+':
        printf("%d",add(num1, num2));
        break;
    case '-':
        printf("%d", subs(num1,num2));
        break;
    case '*':
        printf("%d",mul(num1,num2));
        break;
    case '/':
        printf("%f",div(num1, num2));
        break;
    default:
        printf("Which option was that?\n");
    }
    return 0;
}

【问题讨论】:

  • 其他需要注意的事情,div 应该返回 float 而不是 int。并注意除以零。
  • 是的,我实际上注意到了这一点,并在我的原始代码中进行了修复并修复了它。谢谢,@cool-guy 指出。改变它。

标签: c io mingw mingw32 getchar


【解决方案1】:
scanf("%d %d",&num1,&num2);

这个输入后面有一个换行符,你需要忽略它

scanf("%d %d%*c",&num1,&num2);

while((c=getchar()) != '\n') && c != EOF);

否则,getchar() 会拾取换行符

【讨论】:

    猜你喜欢
    • 2021-03-19
    • 2014-09-24
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    相关资源
    最近更新 更多