无法在此 C 程序中找到错误
我无法在这个 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
我想为每个 scanfs 提供 a 1 1
、 b 2 2
、 c 3 3
作为我的输入,但它没有等待我在第三个 scanf 中的输入。为什么会这样呢?为什么它读取我第二次输入到数组的第三个元素?
I'm unable to find bug in this C program.
#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;
}
run time:
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
I wanted to give a 1 1
, b 2 2
, c 3 3
as my inputs for each scanfs but it didn't wait for my input in 3rd scanf. Why so? and why did it read my 2nd time input into 3rd elementof array?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在您的代码后添加
getchar()
scanf()
PS:不要使用
scanf()
用于char
条目。Add a
getchar()
after yourscanf()
P.S: Don't use
scanf()
forchar
entry.与其他说明符不同,%c 与 scanf 一起使用时不会忽略空格。在任何情况下,您可能都希望将名称字段设置为字符串:
Unlike the other specifiers, %c when used with scanf does not ignore whitespace. You probably want to make the name fields strings in any case:
您可以在 scanf 之前添加。fflush(stdin);
。事实证明,您不应该在
stdin
上使用fflush
,因为fflush
仅定义为在输出流上工作。换句话说,fflush 在输入流上有未定义的行为。C 标准的摘录说:
You can add.fflush(stdin);
before your scanf.It turns out that you should not use
fflush
onstdin
becausefflush
is only defined to work on output streams. In other wordsfflush
has undefined behaviour on input streams.an extract from the C standard says: