结构体
这个如果第一个用scanf输入, 那么第二个gets将不会执行是什么情况?#include <stdio.h>
#include <conio.h>
#define NUM 3
struct person
{
char name;
char phone;
}man;
int main()
{
int i;
for(i=0; i<NUM; i++)
{
printf("请输入姓名: ");
//gets(man.name);// 如果此处改为scanf, 那么下边的gets将不能执行
scanf("%s", man.name);
printf("请输入手机号: ");
gets(man.phone);
//scanf("%s", man.phone);
}
getch();
putchar('\n');
for(i=0; i<3; i++)
{
printf("姓名: %s\t手机号: %s\n", man.name, man.phone);
}
getch();
return 0;
}
不会被执行是什么意思呢??最后没有输出phone? 猜测 估计是用scanf输入后的回车是‘\r’和一个'\n',scanf只处理了‘\r’,缓冲区里还剩下‘\n’,之后gets读取到的就是‘\n’,这时它就结束了。。。。改了下代码 在scanf后面清除了下缓冲区,结果就可以了
#include <stdio.h>
#include <conio.h>
#define NUM 3
struct person
{
char name;
char phone;
}man;
int main()
{
int i;
for(i=0; i<NUM; i++)
{
printf("请输入姓名: ");
// gets(man.name);// 如果此处改为scanf, 那么下边的gets将不能执行
scanf("%s", man.name);getchar();
printf("请输入手机号: ");
gets(man.phone);
//scanf("%s", man.phone);
}
getch();
putchar('\n');
for(i=0; i<3; i++)
{
printf("姓名: %s\t手机号: %s\n", man.name, man.phone);
}
getch();
return 0;
} 补充一点,当使用连续的两个scanf(%s)时,换行符为分隔符,故不会出现只能输入一次的情况,而当使用一个scanf(%s)和一个gets()时,就会使得换行符被gets读取 从而只能输入一次 automation 发表于 2015-5-3 00:40
补充一点,当使用连续的两个scanf(%s)时,换行符为分隔符,故不会出现只能输入一次的情况,而当使用一个s ...
谢啦 automation 发表于 2015-5-2 23:02
猜测 估计是用scanf输入后的回车是‘\r’和一个'\n',scanf只处理了‘\r’,缓冲区里还剩下‘\n’,之后get ...
谢啦
页:
[1]