这个程序代码中的错误是什么?

时间:2015-07-09 16:37:55

标签: c

我尝试使用ASCII代码,将%d替换为`scanf()代码中的%c。但随后显示 - 添加= 5(如果我将输入5& 6与65 ASCII码放在一起)

#include <stdio.h>
#include <conio.h>

void main()
{
    int num1,num2,res;
    char ch;
    printf("Enter two numbers");
    scanf("%d%d",&num1,&num2);
    printf("Enter the operator from the following\n\nA for +\nB for -\nC for*\nD for /\n");
    scanf("%c",&ch);

    if(ch=='A')
    {
        res=num1+num2;
        printf("Add=%d",res);
    }
    else if(ch=='B')
    {
        res=num1-num2;
        printf("Sub=%d",res);
    }
    else if(ch=='C')
    {
        res=num1*num2;
        printf("Mul=%d",res);
    }
    else if(ch=='D')
    {
        res=num1/num2;
        printf("Div=%d",res);
    }
    else
    {
        printf("Invalid Operator");
    }
    getch();
}

输出:

Here's the Output

任何帮助?

2 个答案:

答案 0 :(得分:1)

令人遗憾的是,你正面临着每个初级C程序员所面临的同样问题:scanf很糟糕。当你打电话

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

它正确读取了您输入的两个数字。但是在输入两个数字后,你可能会点击RETURN。第一次调用scanf 读取返回字符。所以它仍然位于输入缓冲区中,当您稍后调用scanf("%c",&ch)时,它实际上是读取的换行符,而不是您想要读取的A或B. / p>

根本不更改您的程序,您可以尝试输入类似

的内容
12 34A

响应第一个提示。第一个scanf不会读取它,所以现在将位于输入缓冲区中,等待您第二次调用scanf来查找它。

这是一种解决方法,而不是解决方法。要修复它,你可以做@Ediac在他的回答中提出的建议。

(一个更好的解决办法可能根本就不是scanf,但不幸的是,这涉及到了解I / O的情况,而不是你的书或教师可能最初想要进入的权利。)

答案 1 :(得分:0)

我宁愿写一个更有用和正确的代码版本

char** directory_string_array(char* directory, size_t *strcount){
    ...
    //print the array to check it
    for(i = 0; i < *strcount; i++){
        printf("strarray[%d] == %s\n", i, string_array[i]);
    }
    return string_array;
}
void free_directory_string_array(char **string_array, size_t strcount) {
    for(i = 0; i < strcount; i++){
        free(string_array[i]);
    }
    free(string_array);
}

<强>输入

#include <stdio.h>

int main() {
    int n1, n2, ans;
    char op;
    scanf("%d %c %d", &n1, &op, &n2);
    switch (op) {
    case '+':
        ans = n1 + n2;
        break;
    case '-':
        ans = n1 - n2;
        break;
    case '*':
        ans = n1 * n2;
        break;
    case '/':
        if (n2) {
            ans = n1 / n2;
            break;
        }
    default:
        fprintf(stderr, "Invalid Input\n");
        return 1;
    }
    printf("%d", ans);
    return 0;
}

<强>输出

1 + 2
4-3

请参阅http://ideone.com/y2nnWF演示。