# include <stdio.h>
void printstr(char **p);
int main(){ char i; char str[100]; char *num[]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"}; char **p; p=num;// printf("请输入1到7之间的数字\n"); printstr(p); }
void printstr(char **p){ char i; printf("请输入1到7之间的数字\n"); scanf("%c",&i); if('1'<=i && i<='7') printf("%s i=%d\n",*(p+i-49),i),printstr(p);
//************************************************************** if(i<'1') printf("*输入错误!i=%d\n",i),printstr(p);
//***********************************************************
if(i>'7' && i!='a') printf("**输入错误!\n"),printstr(p); if(i=='a') printf("程序结束了\n");}
【错误描述】如图,为啥输入1到7,还会出现输入错误的字样?可见执行了if(i<'1'),但是此时的i=49啊,为啥看图为啥i变成10了
请说明错误,最好给出能执行的正确程序
void printstr(char **p);
int main()
{
char i;
char str[100];
char *num[]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};
char **p;
p=num;
// printf("请输入1到7之间的数字\n");
printstr(p);
}
void printstr(char **p)
{
char i;
_start:
printf("请输入1到7之间的数字\n");
fflush(stdin);
scanf("%c", &i);
if('1'<=i && i<='7')
printf("%s i=%d\n",*(p+i-49),i);
//**************************************************************
if(i<'1')
printf("*输入错误!i=%d\n",i);
//***********************************************************
if(i>'7' && i!='a')
printf("**输入错误!\n");
if(i=='a')
{
printf("程序结束了\n");
return;
}
goto _start;
}
10是换行字符'\n'的ascii码。用scanf读取字符的时候,敲的回车回遗留在缓存里,下次再调用scanf读取字符时,会把这个'\n'读出来,就不会再要求键盘输入了。
另外,每次输出后,又递归调用,这样随着输入次数的增加,递归会越来越深,很容易导致栈溢出。
本回答被提问者采纳#include <conio.h>
void fun()
{
char ch;
scanf("%c",&ch);
printf("%d\n",ch);
fun();
}
void fun1()
{
char ch;
scanf("%c",&ch);
scanf("%c",&ch);
printf("%d\n",ch);
}
void fun2()
{
char ch;
scanf("%c",&ch);
//fflush(stdin);
getch();//在Tc里面还可以用这个
scanf("%c",&ch);
printf("%d\n",ch);
printf("%d",ch);
}
void main()
{
//fun1();
fun2();
printf("\n");
//fun();
}
这两个就是一个很好的比较。当我们用scanf的时候,我们把1打进去,但是scanf不会接收,只有我们打回车的时候才会接收。。回车也是一个ascII字符。可是scanf没有接收它,留着呢。如何我们要在清除它可以用fflush(stdin);
void printstr(char **p);
int main()
{
char i;
char str[100];
char *num[]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};
char **p;
p=num;
// printf("请输入1到7之间的数字\n");
printstr(p);
}
void printstr(char **p)
{
while(1)//用while循环
{
char i;
printf("请输入1到7之间的数字\n");
scanf("%c",&i);
fflush(stdin);//清理缓冲流,i=10是换行符
if(i>='1' && i<='7')
printf("%s i=%d\n",*(p+i-49),i);
//**************************************************************
if(i<'1')
printf("*输入错误!i=%d\n",i);
//***********************************************************
if(i>'7' && i!='a')
printf("**输入错误!\n");
if(i=='a')
{
printf("程序结束了\n");
break;//结束while循环
}
}
}