鱼C论坛

 找回密码
 立即注册
查看: 1210|回复: 4

[已解决]给s14课后题给 整不会了

[复制链接]
发表于 2021-10-4 23:06:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

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

这是我的代码,在你的基础上稍微修改,希望能对你有帮助
#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[b] )   break;   
        }
                
        if( b > MAXLEN-1 ) printf("\n请输入整数: ");
        else
        {
                printf("当前字符为:%c(%d) \n", i[b], i[b]);
                printf("\n请输入一个合法的数字:");
        }        
    }

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-5 01:35:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 HalfNG 于 2021-10-5 01:38 编辑

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

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

这是我的代码,在你的基础上稍微修改,希望能对你有帮助
#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[b] )   break;   
        }
                
        if( b > MAXLEN-1 ) printf("\n请输入整数: ");
        else
        {
                printf("当前字符为:%c(%d) \n", i[b], i[b]);
                printf("\n请输入一个合法的数字:");
        }        
    }

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

大佬 牛逼    所以用getchar来做那个课后题是不是不太行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-7 18:23:22 From FishC Mobile | 显示全部楼层
anily 发表于 2021-10-5 15:51
大佬 牛逼    所以用getchar来做那个课后题是不是不太行

哈哈  不是不太行,是getchar( )的字符输入太呆板,你要建立自己的字符匹配模式来判断有哪些是你需要的,哪些是你不需要的。而且对输入数据还要确定这些准确性。
正确的读入有时比正确的输出困难,小甲鱼的题嘛,等你再成长成长,就能知道他的意义了(^_^)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

收到 我在摸索摸索
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 13:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表