我写的递归反输字符串程序有几大疑点!!!请教高手!!!

来源:百度知道 编辑:UC知道 时间:2024/06/25 06:36:33
#include "stdio.h"

void prt(int n)
{
char next;
if(1 >= n)
{
next = getchar();
printf("\n");
putchar(next);
}
else
{
next = getchar();
prt(n - 1);
putchar(next);
}
}

void main()
{
int n;
printf("please input n:\n");
scanf("%d\n", &n); /*这里注意要有\n!不然会把输入n后的回车当成第一个字符!*/
printf("please input a string:\n"); /*为什么输入字符串后才显示???*/
prt(n);
printf("\n");
}

问题是出在以下几个语句上:
printf("please input n:\n");
scanf("%d\n", &n); /*这里注意要有\n!不然会把输入n后的回车当成第一个字符!*/
printf("please input a string:\n"); /*为什么输入字符串后才显示???*/

1、如果n在main函数里直接赋值(例如n=5),而不是由用户输入,那么这个程序没有问题;
2、如果scanf("%d\n", &n);写成scanf("%d", &n); ,那么运行结果会有问题:
please input n:
3

...其实要忽略那个回车很简单, 用多一个 getchar() 就行了

需要这样修改:
scanf("%d", &n); /* 先把这里的 \n 去掉 */
getchar(); /* 然后在这里加上这么一句 */
printf("please input a string:\n"); /* 这样问题就解决了 */