while循环
#include <stdio.h>int main()
{
int ch,i=0;
_Bool k=1;
while(k)
{
printf("请输入合法数字:");
while((ch=getchar())!='\n')
{
if(ch>='0'&&ch<='9')
{
i=i+ch-'0';
}
else
{
k=0;
break;
}
}
}
printf("结果是%d\n",i);
return 0;
}
功能已实现
但当我这样调试:
请输入合法数字:20
请输入合法数字:20
请输入合法数字:f
结果是4
为什么会出现这样的结果,当我输入超过个位数时不应该执行break,输出0吗?就像我一开始输入字母一样,输出就为0.
你想实现的功能是什么呢?
最终结果打印 4 应该是因为 i 循环过程中没有初始化 /Users/dzh/Desktop/1.png Twilight6 发表于 2022-5-11 14:38
你想实现的功能是什么呢?
最终结果打印 4 应该是因为 i 循环过程中没有初始化
我想输入只能是个位数,如果用户输入超过个位数,报错或直接结束循环
我现在遇到的问题是我运行请输入合法数字:56
请输入合法数字:56
请输入合法数字:h
结果是22
运算过程是5+6+5+6=22 Weabu 发表于 2022-5-11 16:46
我想输入只能是个位数,如果用户输入超过个位数,报错或直接结束循环
我现在遇到的问题是我运行请输入合 ...
这样的需求可以不用循环吧,参考代码:
#include <stdio.h>
int main()
{
int ch, i = 0;
printf("请输入合法数字:");
ch = getchar();
if (ch >= '0' && ch <= '9' && getchar() == '\n'){
i = i + ch - '0';
printf("结果是%d\n", i);
}
else{
printf("你输入的数值不合法!\n");
}
return 0;
} #include <stdio.h>
int main()
{
int num=0;
long sum =0L;
int status;
do
{
printf("请输入合法数字:");
sum=sum+num;
status=scanf("%d",&num);
} while (status==1);
printf("结果是%ld\n",sum);
return 0;
}
这个的while的循环条件是怎么理解啊
如果当我输入为3的时候status不应该为3吗,不符合循环条件才对啊
为什么代码还是实现了功能 Twilight6 发表于 2022-5-11 17:02
这样的需求可以不用循环吧,参考代码:
而且我调换11 12行位置输出的结果为什么是不一样的呢
Weabu 发表于 2022-5-11 17:14
#include
int main()
scanf返回值是成功赋值的元素个数 Weabu 发表于 2022-5-11 17:16
而且我调换11 12行位置输出的结果为什么是不一样的呢
scanf 函数的返回值是用户输入的数据与格式字符串中成功匹配次数
你这里 %d 只进行一次格式化,那么久返回 1 Twilight6 发表于 2022-5-11 18:11
scanf 函数的返回值是用户输入的数据与格式字符串中成功匹配次数
你这里 %d 只进行一次格式化,那么 ...
那scanf("%d",&num)
是也还给num赋值了吗 Weabu 发表于 2022-5-12 10:29
那scanf("%d",&num)
是也还给num赋值了吗
是的
Twilight6 发表于 2022-5-12 10:33
是的
那为什么我调换11和12行代码位置,输出的结果却不一样了 Weabu 发表于 2022-5-12 10:36
那为什么我调换11和12行代码位置,输出的结果却不一样了
是因为你这先打印 i 值,再进行计算 i 的值,自然就不同了
Twilight6 发表于 2022-5-12 10:37
是因为你这先打印 i 值,再进行计算 i 的值,自然就不同了
没调转之前逻辑:输入3
sum=0+3=3
status=1,num=3
循环
输入3
sum=3+3=6
status=1,num=3
循环
输入f
退出循环
输出6
调换后
输入3
status=1,num=3
sum=0+3=3
循环
输入3
statue=1,num=3
sum=3+3=6
循环
输入f
退出循环
输出6
可是为什么输出为9 呢 Weabu 发表于 2022-5-12 10:44
没调转之前逻辑:输入3
sum=0+3=3
status=1,num ...
你是指哪个代码,我发现我们好像不在一个频道了哈哈尴尬,把你代码再发一次吧
Twilight6 发表于 2022-5-12 10:37
是因为你这先打印 i 值,再进行计算 i 的值,自然就不同了
我多试了几组数,觉得最后一次输入的数多加了一次
Twilight6 发表于 2022-5-12 10:48
你是指哪个代码,我发现我们好像不在一个频道了哈哈尴尬,把你代码再发一次吧
#include <stdio.h>
int main()
{
int num=0;
long sum =0L;
_Bool status;
do{
printf("请输入合法数字:");
status=scanf("%d",&num);
sum=sum+num;
} while (status==1);
printf("结果是%ld\n",sum);
return 0;
}
status=scanf("%d",&num);
sum=sum+num;
这两行调换 Weabu 发表于 2022-5-12 10:51
#include
int main()
对,因为你退出循环要输入 1 ,所以 若 sum=sum+num 这行代码在 scanf 下,就会多 +1
Twilight6 发表于 2022-5-12 10:56
对,因为你退出循环要输入 1 ,所以 若 sum=sum+num 这行代码在 scanf 下,就会多 +1
好的,已经弄明白了
非常感谢耐心解答🙏 Weabu 发表于 2022-5-12 11:10
好的,已经弄明白了
非常感谢耐心解答🙏
{:10_282:}
页:
[1]