getchar () не ждет ввода и переходит прямо к следующей строке - PullRequest
0 голосов
/ 09 апреля 2020

getchar () не ждет ввода и переходит прямо к следующей строке. Я думаю, что есть некоторое несоответствие между scanf и getchar, но я не могу понять, что именно.

#include<stdio.h>
#include<ctype.h>

int main()
{

char ch;
int n1,n2;

printf("Enter the operation of your choice\n");
printf("a. add\ts. subtact\nm. multiply\td. divide\nq. quit\n");

while((ch=getchar())!='q')
{
 printf("\nEnter 1st number:\n");
    if(scanf("%d",&n1)!=1)
    {
        printf("Please enter an integer value.\n");
        continue;
    }
       printf("Enter 2nd number:\n");
    if(scanf("%d",&n2)!=1)
    {
        printf("Please enter an integer value.\n");
        continue;
    }  

 switch(ch)
    {
        case 'a':
        { printf(" %d + %d = %d\n",n1,n2,n1+n2);
          break;  
        }

        case 's':
        {
            printf(" %d - %d = %d\n",n1,n2,n1-n2);
            break;
        }

        case 'm':
        {
            printf(" %d * %d = %d\n",n1,n2,n1*n2);
            break;
        }

         case 'd':
        {

            if(n2!=0)
            {
            printf(" %d / %d = %f\n",n1,n2,(float)n1/n2);
            break;
            }
            else
            {
                printf("Enter a non-zero number for n2\n");
                continue;
            }

            break;
        }

    }

 printf("Enter the operation of your choice\n");
 printf("a. add\ts. subtact\nm. multiply\td. divide\nq. quit\n");
  }
  printf("Bye.");
 }

ВЫХОД:

Введите операцию по вашему выбору

a. добавить с. подтакт

м. умножить d. разделить

кв. выйти

a

Введите 1-й номер:

50

Введите 2-й номер:

25

50 + 25 = 75

Введите операцию по вашему выбору

a. добавить с. подтакт

м. умножить d. разделить

кв. выйти

Введите 1-е число:

1 Ответ

0 голосов
/ 09 апреля 2020

ваш getchar читает символ новой строки и другие пробелы, которые вы вводите, когда задаете значение, прочитанное scanf , вам нужно пропустить эти пробелы

просто замените

while((ch=getchar())!='q')

от

 while ((scanf(" %c", &ch) == 1) && (ch != 'q')) 

обратите внимание на пробел перед '%', благодаря этому пробелы, включая символ новой строки, пропущены

...