Почему этот код c не генерирует ожидаемый результат? - PullRequest
4 голосов
/ 09 декабря 2010

Я написал этот простой код на C в Microsoft Visual C ++ 2010.

   #include<stdio.h>
    #include<conio.h>
    void main()
    {
    char title[20], artist[30];
    int numtrack, price;
    char type;

    printf("Enter the title of CD \n");
    scanf("%s",title);
    printf("\nName of the artist \n");
    scanf("%s",artist);
    printf("\nEnter the type of CD(enter a for album and s for single)\n");
    scanf("%c",&type);
    printf("\n Enter the number of tracks \n");
    scanf("%d", &numtrack);
    printf("\n Enter the price of the cd \n");
    scanf("%d", &price);
    printf("%s\n%s\n%c\n%d\n%d\n",title, artist, type, numtrack, price);
    getch();
    }

Это положено

Enter the title of CD
ranjit

Name of the artist
mahanti

Enter the type of CD(enter a for album and s for single)

 Enter the number of tracks

4

 Enter the price of the cd
4
ranjit
mahanti


4
4

Я не могу понять, почему он не ждет ввода для переменной типа? Кто-нибудь может объяснить это, пожалуйста? Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 09 декабря 2010

Вместо

scanf("%c",&type);

вы хотите

scanf(" %c",&type);

В противном случае один из символов новой строки из предыдущей строки будет использоваться как тип.

0 голосов
/ 09 декабря 2010

'\ n' из предыдущего scanf обрабатывается для типа

0 голосов
/ 09 декабря 2010

Добавьте getchar() после scanf("%s",artist);, чтобы дополнительные \n (или \r\n) потреблялись.

0 голосов
/ 09 декабря 2010

Когда вы используете scanf для чтения строки, она читает только одно слово. Это единственное слово исключает символ новой строки ("\n"). Когда вы следуете за scanf, чтобы прочитать один символ, как вы делаете с type, символом новой строки будет символ, который читается.

Вы можете исправить это, добавив пробел перед %c, который будет игнорировать любые пробелы (см. http://www.cplusplus.com/reference/clibrary/cstdio/scanf/): scanf(" %c",&type)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...