|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
-
复制代码
这个是我写的 达不到效果 求助下大佬们
本帖最后由 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;
- }
复制代码
|
|