大佬们帮忙看看为什么不能跳出循环啊
这是一个只输出数字且只输出一组数字的程序,比如输入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 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;
}
还有啊,代码注释应该是 //,不是 \\,你的代码那两个地方写错了 #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 ;
}
}
} 虽然你在判断 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;
} zhangjinxuan 发表于 2022-11-17 15:32
你的程序思路不是很对,重写了一下:
就是说先记一个变量,遇到数字把变量设置为真,如果不是数字,并且 ...
太感谢了 jackz007 发表于 2022-11-17 15:43
感谢 tommyyu 发表于 2022-11-17 15:44
虽然你在判断 c > '9' 时把 b 设为了 '\n',但是在下一轮循环开始前,还是会执行 (b = getchar()) != '\n'...
感激不尽 zhangjinxuan 发表于 2022-11-17 15:32
你的程序思路不是很对,重写了一下:
就是说先记一个变量,遇到数字把变量设置为真,如果不是数字,并且 ...
大佬,不行啊,按你说的在我的代码上改了,还是无法跳出循环,最终还是输出了两组数据
本帖最后由 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;
}
还是你想说,这个也不对??? 你给程序输入的是什么,我非常好奇{:10_277:} zhangjinxuan 发表于 2022-11-17 16:14
你给程序输入的是什么,我非常好奇
我输入的是adw789wda45adw,按道理他应该只输出789,但是他输出了78945 zhangjinxuan 发表于 2022-11-17 16:11
用第一个代码,因为代码思路不对,所以难改对
用这个:
这个没试过,我来试试 清如许 发表于 2022-11-17 16:19
我输入的是adw789wda45adw,按道理他应该只输出789,但是他输出了78945
我这边并没有输出78945 zhangjinxuan 发表于 2022-11-17 16:20
我这边并没有输出78945
https://s1.ax1x.com/2022/11/17/zmZFC8.png zhangjinxuan 发表于 2022-11-17 16:20
我这边并没有输出78945
https://s1.ax1x.com/2022/11/17/zmZk8S.png 清如许 发表于 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]