为什么这个c代码没有产生预期的输出?

时间:2010-12-09 16:33:19

标签: c visual-c++

我在microsoft visual c ++ 2010中编写了这个简单的c代码。

   #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 个答案:

答案 0 :(得分:7)

而不是

scanf("%c",&type);

你想要

scanf(" %c",&type);

否则,前一个字符串中的一个换行符将作为类型使用。

答案 1 :(得分:0)

当您使用scanf读取字符串时,它只读入一个单词。这个单词排除了换行符("\n")。当您使用scanf按照此处跟随type读取单个字符时,换行符将是已读取的字符。

您可以通过在%c之前添加一个空格来解决此问题,该空格将忽略任何空格(请参阅http://www.cplusplus.com/reference/clibrary/cstdio/scanf/):scanf(" %c",&type)

答案 2 :(得分:0)

getchar()之后添加scanf("%s",artist);,以便消耗额外的 \n (或 \r\n )。

答案 3 :(得分:0)

正在为类型

处理上一个scanf的'\ n'