鱼C论坛

 找回密码
 立即注册
查看: 3529|回复: 15

[已解决]大佬们帮忙看看为什么不能跳出循环啊

[复制链接]
发表于 2022-11-17 15:14:47 | 显示全部楼层 |阅读模式

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

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

x
这是一个只输出数字且只输出一组数字的程序,比如输入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;
 } 
最佳答案
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;
 } 

还有啊,代码注释应该是 //,不是 \\,你的代码那两个地方写错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
 } 

还有啊,代码注释应该是 //,不是 \\,你的代码那两个地方写错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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       ;
                }
        }
}

评分

参与人数 1鱼币 +1 收起 理由
清如许 + 1 感谢

查看全部评分

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

使用道具 举报

发表于 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;
 } 

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
清如许 + 1 + 1 感谢

查看全部评分

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

使用道具 举报

 楼主| 发表于 2022-11-17 15:48:50 | 显示全部楼层
zhangjinxuan 发表于 2022-11-17 15:32
你的程序思路不是很对,重写了一下:

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

太感谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-17 15:49:30 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感激不尽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-17 16:10:16 | 显示全部楼层
zhangjinxuan 发表于 2022-11-17 15:32
你的程序思路不是很对,重写了一下:

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

大佬,不行啊,按你说的在我的代码上改了,还是无法跳出循环,最终还是输出了两组数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
} 

还是你想说,这个也不对???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-17 16:14:20 | 显示全部楼层
你给程序输入的是什么,我非常好奇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-17 16:19:16 | 显示全部楼层
zhangjinxuan 发表于 2022-11-17 16:14
你给程序输入的是什么,我非常好奇

我输入的是adw789wda45adw,按道理他应该只输出789,但是他输出了78945
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-17 16:19:46 | 显示全部楼层
zhangjinxuan 发表于 2022-11-17 16:11
用第一个代码,因为代码思路不对,所以难改对

用这个:

这个没试过,我来试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-17 16:20:33 | 显示全部楼层
清如许 发表于 2022-11-17 16:19
我输入的是adw789wda45adw,按道理他应该只输出789,但是他输出了78945

我这边并没有输出78945
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-17 16:33:38 | 显示全部楼层
zhangjinxuan 发表于 2022-11-17 16:20
我这边并没有输出78945


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-17 16:34:23 | 显示全部楼层
zhangjinxuan 发表于 2022-11-17 16:20
我这边并没有输出78945


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-17 17:00:57 | 显示全部楼层

说了用这个呀:
#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;
} 
如果你的思路错了,那么写的代码就很难正确了,改也不一定改对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 04:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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