清如许 发表于 2022-11-17 15:14:47

大佬们帮忙看看为什么不能跳出循环啊

这是一个只输出数字且只输出一组数字的程序,比如输入adw789awd455adw,他只会输出789
我这个程序本该是在第一组数字输出后跳出循环,但是现在不知道为啥无法跳出,会输出两组数字
#include<stdio.h>
int main()
{
        int a,c;
        int b;
        a=0;
        while((b=getchar())!='\n')            \\循环的条件是b不等于回车
        {       
                if(b>='0'&&b<='9')
                {   
                        printf("%c",b);
                        c=getchar();
                        if(c>'9')
                        {
                                b='\n';                  \\这里检索到数字后面接着字母后就应该跳出循环,但是不知为啥无法跳出
                        }
                        else
                        {
                                printf("%c",c);
                        }
                               
                                       
                }
                if(b=='.')
                {
                        break;
                }
       
        }
       
       
       
       
       
       
        return 0;
}

zhangjinxuan 发表于 2022-11-17 15:32:00

本帖最后由 zhangjinxuan 于 2022-11-17 16:14 编辑

你的程序思路不是很对,重写了一下:
#include <stdio.h>

int main() {
        char b;
        int find_number = 0;
        while ((b = getchar()) != '\n') {
                if (b >= '0' && b <= '9') {
                        printf("%c", b);
                        find_number = 1;
                } else {
                        if (find_number) return 0;
                }
        }
    return 0;
}
就是说先记一个变量,遇到数字把变量设置为真,如果不是数字,并且遇到过数字,说明第一个数字已经读完了,输出完了,就不需要执行下去了,直接退出

你的代码因为新的一轮循环就已经把 b 给覆盖掉了,所以你在 b = '\n' 也没有任何的作用

如果要在你的代码基础上改的话,可以这么改,不过因为思路不是很对,所以也难免有错:
#include<stdio.h>
int main()
{
      int a,c;
      int b;
      a=0;
      while((b=getchar())!='\n')
      {      
                if(b>='0'&&b<='9')
                {   
                        printf("%c",b);
                        c=getchar();
                        if(c>'9')
                        {
                              b='\n';
                        }
                        else
                        {
                              printf("%c",c);
                        }
                              
                                       
                }
                if(b=='\n') //判断条件改一改就可以了
                {
                        break;
                }
      
      }
      return 0;
}

还有啊,代码注释应该是 //,不是 \\,你的代码那两个地方写错了

jackz007 发表于 2022-11-17 15:43:18

#include<stdio.h>
int main()
{
      int a = 0 ;
      char b    ;
      while((b = getchar()) !='\n')   // 此 getchar() 应当成为字符 b 的唯一来源
      {      
                if(b >= '0' && b <= '9')
                {   
                        printf(" %c" , b) ;
                        a ++            ;
                }
                else
                {
                        if(a) break       ;
                }
      }
}

tommyyu 发表于 2022-11-17 15:44:43

虽然你在判断 c > '9' 时把 b 设为了 '\n',但是在下一轮循环开始前,还是会执行 (b = getchar()) != '\n' 这一条语句, 这导致 b 再次被输入赋值,从而改变了 b 的值

解决方法:发现 c 不满足条件时就直接用 break 跳出循环#include<stdio.h>
int main()
{
      int a,c;
      int b;
      a=0;
      while((b=getchar())!='\n')      
      {      
                if(b>='0'&&b<='9')
                {   
                        printf("%c",b);
                        c=getchar();
                        if(c>'9' || c<'0')
                        {
                              break;                  
                        }
                        else
                        {
                              printf("%c",c);
                        }
                              
                                       
                }
                if(b=='.')
                {
                        break;
                }
      
      }
      
      
      
      
      
      
      return 0;
}

清如许 发表于 2022-11-17 15:48:50

zhangjinxuan 发表于 2022-11-17 15:32
你的程序思路不是很对,重写了一下:

就是说先记一个变量,遇到数字把变量设置为真,如果不是数字,并且 ...

太感谢了

清如许 发表于 2022-11-17 15:49:30

jackz007 发表于 2022-11-17 15:43


感谢

清如许 发表于 2022-11-17 15:50:05

tommyyu 发表于 2022-11-17 15:44
虽然你在判断 c > '9' 时把 b 设为了 '\n',但是在下一轮循环开始前,还是会执行 (b = getchar()) != '\n'...

感激不尽

清如许 发表于 2022-11-17 16:10:16

zhangjinxuan 发表于 2022-11-17 15:32
你的程序思路不是很对,重写了一下:

就是说先记一个变量,遇到数字把变量设置为真,如果不是数字,并且 ...

大佬,不行啊,按你说的在我的代码上改了,还是无法跳出循环,最终还是输出了两组数据

zhangjinxuan 发表于 2022-11-17 16:11:36

本帖最后由 zhangjinxuan 于 2022-11-17 16:15 编辑

清如许 发表于 2022-11-17 16:10
大佬,不行啊,按你说的在我的代码上改了,还是无法跳出循环,最终还是输出了两组数据

用第一个代码,因为代码思路不对,所以难改对

用这个:
#include <stdio.h>

int main() {
      char b;
      int find_number = 0;
      while ((b = getchar()) != '\n') {
                if (b >= '0' && b <= '9') {
                        printf("%c", b);
                        find_number = 1;
                } else {
                        if (find_number) return 0;
                }
      }
    return 0;
}

还是你想说,这个也不对???

zhangjinxuan 发表于 2022-11-17 16:14:20

你给程序输入的是什么,我非常好奇{:10_277:}

清如许 发表于 2022-11-17 16:19:16

zhangjinxuan 发表于 2022-11-17 16:14
你给程序输入的是什么,我非常好奇

我输入的是adw789wda45adw,按道理他应该只输出789,但是他输出了78945

清如许 发表于 2022-11-17 16:19:46

zhangjinxuan 发表于 2022-11-17 16:11
用第一个代码,因为代码思路不对,所以难改对

用这个:


这个没试过,我来试试

zhangjinxuan 发表于 2022-11-17 16:20:33

清如许 发表于 2022-11-17 16:19
我输入的是adw789wda45adw,按道理他应该只输出789,但是他输出了78945

我这边并没有输出78945

清如许 发表于 2022-11-17 16:33:38

zhangjinxuan 发表于 2022-11-17 16:20
我这边并没有输出78945

https://s1.ax1x.com/2022/11/17/zmZFC8.png

清如许 发表于 2022-11-17 16:34:23

zhangjinxuan 发表于 2022-11-17 16:20
我这边并没有输出78945

https://s1.ax1x.com/2022/11/17/zmZk8S.png

zhangjinxuan 发表于 2022-11-17 17:00:57

清如许 发表于 2022-11-17 16:34


说了用这个呀:
#include <stdio.h>

int main() {
      char b;
      int find_number = 0;
      while ((b = getchar()) != '\n') {
                if (b >= '0' && b <= '9') {
                        printf("%c", b);
                        find_number = 1;
                } else {
                        if (find_number) return 0;
                }
      }
    return 0;
}
如果你的思路错了,那么写的代码就很难正确了,改也不一定改对
页: [1]
查看完整版本: 大佬们帮忙看看为什么不能跳出循环啊