gets_scanf_getchar的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 00:36:28
void input(int *num,char name[N][8])
{
int i;
for (i=0;i<N;i++)
{
printf("\nInput No.:");
scanf("%d\n",&num[i]);
printf("\nInput name:");
getchar();
gets(name[i]);
}
}
输出结果为:
Input No.: 1
Li

Input name:
input No.:2
Wang

Input name:
Input No.:

而如果把上面程序段scanf里面的\n拿掉,变为:scanf("%d",&num[i]);
则输出结果是正确的,如下所示:
Input No.: 1
Input name:
Input No.: 1
Input name:Li
Input No.: 2
Input name:Wang
Input No.: 7
Input name:Xiao

问:怎么会出现这样的情况???谢了

调试程序……
#include<iostream>
using namespace std;

const int N = 10;

void input(int *num,char name[N][8])
{
int i;
for (i=0;i<N;i++)
{
printf("\nInput No.:"); //这里\n相当于一个回车了
scanf("%d\n",&num[i]);//这里的\n依然是一个回车,也就是说该句的意思是输入回车后输入num[ i ];
printf("\nInput name:");
getchar();
gets(name[i]);
}
}

int main()
{
int a[ 100 ] ;
char b[ 100 ][ 8 ];
input(a,b);
system("pause");
return 0;
}

所以……每次它都想读你数据给的回车。。你不给他回车它就只好读下一段了。\n删去就不读回车了。

在scanf里面放'\n'你要干吗呢?

你要好好理解一下scanf。它是个输入函数,\n一般之和printf发生联系。