c语言 指针数组打印星期一到星期日

# 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了

请说明错误,最好给出能执行的正确程序

第1个回答  推荐于2016-12-01
# 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;
_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'读出来,就不会再要求键盘输入了。

另外,每次输出后,又递归调用,这样随着输入次数的增加,递归会越来越深,很容易导致栈溢出。

本回答被提问者采纳
第2个回答  2013-05-21
#include <stdio.h>
#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);

第3个回答  2013-05-21
# 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)
{
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循环
}
}

}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网