anily 发表于 2021-10-4 23:06:49

给s14课后题给 整不会了

我按顺序做
在while ((ch = getchar()) != '\n')
{
      printf("%c", ch);
}
的时候我在想程序运行的时候应该是我打一个字符他接着输出一个字符来着结果是 按下回车后 字符才全部出现
所以我觉得很奇怪然后去百度搜了一下发现原来 getchar是从缓冲区一个一个字符出来的
在循环里面加个Sleep就可以发现了
然后 在动动手1.的时候
如果要用getchar来处理判断输入的字符该怎么做   想的我头有点大
下面是我的代码#include<stdio.h>
int main ()
{
        inti[]={'0','1','2','3','4','5','6','7','8','9'};
        int flag=1;
        intb=0;
        charw;
        printf("请输入一个合法的数字:");
        while(flag==1)
        {
               
                w=getchar();
          for(b=0;b<=9;b++)
          {
                        if(w!=i && w!='\n')   
                  {
                          printf("当前字符为:%d \n",i);
                          printf("请输入一个合法的数字:");
                  
                          break ;
                          if (b==9 )
                        {
                                printf("请输入整数");
                       }
                  }
                  
        }
                }
return 0;
        }
       

这个是我写的达不到效果 求助下大佬们

HalfNG 发表于 2021-10-5 01:35:34

本帖最后由 HalfNG 于 2021-10-5 01:38 编辑

按照你的代码调试了一下,改了些格式,发现有明显问题,比如第一个break语句
for(b=0;b<=9;b++)
{
    if(w!=i && w!='\n')   
    {
      printf("当前字符为:%d \n",i);
      printf("请输入一个合法的数字:");
                  
      break;
                                  
      if (b==9 ) printf("请输入整数");
    }      
}
这使得你的代码在每次进入循环时,如果w的值不为字符'0',直接退出之后的代码不会再执行。

其次就是getchar()的使用,你的操作让我想起第一次使用getchar()时也是不能很准确的抓住想要的输入{:10_269:}。逐个字符的输入看似只有一个,实则可能有多个,这个也是不可预知的{:10_256:}
所以我选择使用一个循环来抓取字符,在进行相应的判断

这是我的代码,在你的基础上稍微修改,希望能对你有帮助
#include<stdio.h>
#define MAXLEN 10

int main ()
{
    int i[ MAXLEN ] = { '0','1','2','3','4','5','6','7','8','9' };
    int b, w, ch;
      
    printf("请输入一个合法的数字:");
   
    while(1)
    {
        ch = 0;
           
      while( ( w = getchar() ) &&
                        (w != '\n' && w != EOF) )
        { ch = w; }
             
      for( b = 0; b < MAXLEN; b++ )
      {
            if( ch == i )   break;   
      }
             
      if( b > MAXLEN-1 ) printf("\n请输入整数: ");
      else
      {
              printf("当前字符为:%c(%d) \n", i, i);
                printf("\n请输入一个合法的数字:");
        }       
    }

    return 0;
}

anily 发表于 2021-10-5 15:51:38

HalfNG 发表于 2021-10-5 01:35
按照你的代码调试了一下,改了些格式,发现有明显问题,比如第一个break语句

这使得你的代码在每次进入 ...

大佬 牛逼    所以用getchar来做那个课后题是不是不太行

HalfNG 发表于 2021-10-7 18:23:22

anily 发表于 2021-10-5 15:51
大佬 牛逼    所以用getchar来做那个课后题是不是不太行

哈哈不是不太行,是getchar( )的字符输入太呆板,你要建立自己的字符匹配模式来判断有哪些是你需要的,哪些是你不需要的。而且对输入数据还要确定这些准确性。
正确的读入有时比正确的输出困难,小甲鱼的题嘛,等你再成长成长,就能知道他的意义了(^_^)

anily 发表于 2021-10-7 18:50:30

HalfNG 发表于 2021-10-7 18:23
哈哈不是不太行,是getchar( )的字符输入太呆板,你要建立自己的字符匹配模式来判断有哪些是你需要的, ...

收到 我在摸索摸索
页: [1]
查看完整版本: 给s14课后题给 整不会了