【发布时间】:2010-07-31 14:38:11
【问题描述】:
我在这个 C 程序中找不到错误。
#include <stdio.h>
int main()
{
struct book
{
char name ;
float price ;
int pages ;
} ;
struct book b[3] ;
int i ; int k;
for ( i = 0 ; i <= 2 ; i++ )
{
printf ( "\nEnter name, price and pages: " ) ;
k = scanf ( "%c %f %d", &b[i].name, &b[i].price, &b[i].pages ) ;
}
for ( i = 0 ; i <= 2 ; i++ )
printf ( "\n%c %f %d", b[i].name, b[i].price, b[i].pages ) ;
//getch();
return 0;
}
运行时间:
Enter name, price and pages: a 1 1
Enter name, price and pages: b 2 2
Enter name, price and pages:
a 1.000000 1
7922540190797673100000000000000000.000000 4200368
b 2.000000 2
我想将a 1 1、b 2 2、c 3 3 作为每个 scanfs 的输入,但它没有等待我在第三个 scanf 中的输入。为什么这样?为什么它会将我的第二次输入读取到数组的第三个元素中?
【问题讨论】:
-
现在您会发现 NOBODY 使用 scanf 的原因了。
-
@Paul Tomblin:震惊!没有人使用scanf??为什么??这里到底发生了什么。我在这里错过了什么?
-
@walter 没有人使用 scanf 来处理人类的输入。
-
scanf 如果不能完全满足它的要求,它的表现就会不好。我认为在你的情况下发生的事情是它接受行尾的返回作为第一个字符第二个数组,然后从那里进入杂草,因为它不会这样做。