getchar的几个小问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 16:35:35
大家看看我下面的几个程序:题目是:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
首先:我用下面的程序:
#include "stdio.h"
main()
{
int i=5;
void palin(int n);
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<=1)
{
next=getchar();
putchar(next);
}
else
{
next=getchar();
palin(n-1);
putchar(next);
}
}
此时,我输入:12345,然后回车。
输出:54321

那么我再改:
#include "stdio.h"
main()
{
int i;
void palin(int n);
printf("input the i");
scanf("%d",&i);
palin(i);
printf("\n");
}
void palin(n)
{int n;
char next;
if(n<=1)
{
next=getchar();
putchar(next);
}
else
{
next=getchar();
palin(n-1);
putchar(next);
}
}
这个时候,运行:出现: input

getchar 到输入流中去取字符,如果输入流中有剩余回车键,它会取进。

你可以用 fflush (stdin); 把键盘 输入流中前面输入的 剩余 字符清除。

例2中:
scanf("%d",&i);
fflush (stdin); // 清除剩余字符

例2的另一种方法:
scanf("%d\n",&i); // 用这种格式输入

void palin(n)
{int n; // 重复声明了 n
char next;

应当改cheng:
void palin(int n)
{
char next;

getchar()只能输入一个字符