【发布时间】:2016-11-12 11:38:31
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
struct test
{
int id;
char name[20];
};
int main()
{
struct test t1;
t1.id=1;
fflush(stdin);
fgets(t1.name,20,stdin);
print((&t1.name));
print1(t1.id,&(t1.name));
}
void print(struct test *name)
{
puts(name);
}
void print1(struct test id,struct test *name)
{
printf("\n%d\n",id);
puts(name);
}
当我运行这个程序时,它要求输入
测试[输入]
输出出来
测试 1 (然后程序终止)
为什么第一个 puts 有效,为什么 puts in 第二个函数没有?是的,有一个发送完整结构的选项,但我想知道这里出了什么问题。
【问题讨论】:
-
首先
fflush(stdin);不正确。删除它。 -
也许在编译所有警告时会有所帮助
-
当需要同时获取许多字符串变量时,我已经开始使用flush,例如string1,string2和fgets。如果我不使用flash(),字符串的输入很奇怪
-
@EdHeal 如果 OP 不注意警告,则无济于事。是否有任何编译器不会对此代码发出警告?
-
@ekaf Code::Blocks 是 IDE,而不是编译器。您可能正在使用 GCC 作为编译器。
标签: c function struct pass-by-reference puts