C中多条件的问题

时间:2014-10-17 13:35:16

标签: c

我编写的代码将操作计为+-*/,阶乘等。问题是我的代码一次有效。它显示:

  

Zadajte operaciu

这意味着“写下你想做的事”。但是在第一次循环结束后。它显示:

  

Zadajte operaciu:Zadajte operaciu:

两次,我不知道为什么。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int a,b,vysledok;
char s;
do{

printf("Zadajte operaciu:");

s=getchar();
if(s=='+' || s== '-' ||s== '*' || s=='/' ||s== '^')
{
    puts("Operacia je binarna.\nZadaj prvy operand: ");
    scanf("%d",&a);
    puts("Zadaj druhy operand: ");
    scanf("%d",&b);

     switch (s){
    case '+':
        printf("Vysledok je %d.\n",a+b);
        break;
    case '-':

        printf("Vysledok je %d.\n",a-b);
        break;
    case '/':

        if(b==0)
            puts("CHYBA: nulou sa delit neda.\n");
        else
            printf("Vysledok je %d.\n",a/b);
        break;
    case '*':
         printf("Vysledok je %d.\n",a*b);
        break;
    case '^':
        for(a;a>0;a--)
            b=b*b;
        printf("Vysledok je %d.\n",b);
        break;
}}
 else if(s== '!' || s=='s')
{
    puts("Operacia je unarna.\nZadaj prvy argument: ");
    scanf("%d",&a);
     switch (s){

    case '!':
        vysledok=a;
        for(a;a>0;a--)
            vysledok=vysledok*a;
        printf("Vysledok je %d.\n",vysledok);
        break;
    case 's':
        vysledok=sqrt(a);
        printf("Vysledok je %f.\n",(float)vysledok);
        break;
}}
else if(s=='q')
    puts("Zadany prikaz quit. Ukoncujem.");

} while (s!='q');

return 0;

}

3 个答案:

答案 0 :(得分:1)

输入值后,按enter键(\n)。此字符保留在stdin中。在第二次迭代中,getchar获取\n字符,因为它不符合if之后的条件,if的正文不会被执行,当while中的条件为真时,下一次迭代开始,因此打印两次。

要删除该字符,您需要clear your stdin

答案 1 :(得分:1)

在s = getchar();

之前使用函数getch()
getch();
s=getchar();

可能会帮助您或您可以使用

scanf(" %c",&s);

而不是s = getchar();

不要忘记在%c之前放置空格

答案 2 :(得分:0)

每次调用getchar后都需要清空缓冲区,如下所示:

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

而非单独:

s = getchar();