C输出错误

时间:2014-08-16 15:24:17

标签: c struct

我有这个代码,我使用一个结构,我制作了该结构的3个变量,并将用户输入的值存储到我的结构变量中。 但是,当我将数据输入到我的代码中时输出不正确。 这是我的代码:

#include<stdio.h>   
struct book
{
    char name;
    float price;
    int page;
}b1,b2,b3;

int main()
{
    printf("entr the data\n");
    scanf("%c %f %d",&b1.name,&b1.price,&b1.page);
    scanf("%c %f %d",&b2.name,&b2.price,&b2.page);
    scanf("%c %f %d",&b3.name,&b3.price,&b3.page);

    printf("%c %f %d\n",b1.name,b1.price,b1.page);
    printf("%c %f %d\n",b2.name,b2.price,b2.page);
    printf("%c %f %d\n",b3.name,b3.price,b3.page);
    return 0;
}

输入:

a 5 5 b 6 6 c 7 7

假设输出:

a 5.000000 5
b 6.000000 6
c 7.000000 7

但输出的结果是:

a 5.000000 5

0.000000 0
b 6.000000 6

我不知道为什么会这样。这是我试图运行我的程序的ideone链接,只是为了检查我的编译器是否有问题。 这是链接:http://ideone.com/I0RvJ8

请帮助大家..提前致谢:)

3 个答案:

答案 0 :(得分:2)

ENTER键给出换行符,该字符也计为%c的字符。

答案 1 :(得分:1)

试试这个男人!一个小空间b / w%c,它开始工作哇!

#include<stdio.h>
struct book
{
char name;
float price;
int page;
}b1,b2,b3;

int main()
{
printf("enter the data\n");
scanf("%c %f %d",&b1.name,&b1.price,&b1.page);
scanf(" %c %f %d",&b2.name,&b2.price,&b2.page);
scanf(" %c %f %d",&b3.name,&b3.price,&b3.page);

printf("%c %f %d\n",b1.name,b1.price,b1.page);
printf("%c %f %d\n",b2.name,b2.price,b2.page);
printf("%c %f %d\n",b3.name,b3.price,b3.page);
return 0;
}

答案 2 :(得分:0)

您按下回车键,您需要处理它产生的换行符(或者您将输入存储在一个文件中,其中换行符位于每行的末尾)。您可以在每个getchar()之后添加scanf来电,以占用\n个字符。否则,每个\n将被解释为char并由scanf读取。

scanf("%c %f %d",&b1.name,&b1.price,&b1.page);
getchar();
scanf("%c %f %d",&b2.name,&b2.price,&b2.page);
getchar();
scanf("%c %f %d",&b3.name,&b3.price,&b3.page);
getchar();

请注意,getchar修补程序仅适用于您指定的输入,即每行处理一个\n。如果在三组输入中的每一组之间会有更多换行符,则另一个修复方法是使一个大scanf

scanf("%c%f%d %c%f%d %c%f%d",&b1.name,&b1.price,&b1.page
                            ,&b2.name,&b2.price,&b2.page
                            ,&b3.name,&b3.price,&b3.page);

这与@AndreyT建议相同,但放在一个scanf电话中。 有关scanf %c说明符的人工页面说明了什么:

  

(...)通常跳过前导空格被抑制。跳过白色   首先是空格,使用格式的显式空格。

上面的scanf格式在下一行读取%c之前会占用所有空白字符,第一个非空白字符将被解释为char。

最后一个修复是提到的:

scanf(" %c%f%d",&b1.name,&b1.price,&b1.page);
scanf(" %c%f%d",&b2.name,&b2.price,&b2.page);
scanf(" %c%f%d",&b3.name,&b3.price,&b3.page);

请注意,scanf格式的" "匹配来自stdin的0或更多空白字符。因此,格式" %c%f%d"也适用于第一次扫描。