为什么终端是1是从1到1的水仙花数呢 #include #include int main(
为什么终端是1是从1到1的水仙花数呢
#include<stdio.h>
#include<math.h>
int main()
{
int a,num_init,num;
printf("请输入水仙花数产生的下限值:");
num_init = scanf(" %d", &num_init);
printf("请输入水仙花数产生的上限值:");
a = scanf("%d",&a);
num = num_init;
do {
int num_th = num % 10;
int num_sec = (num / 10) % 10;
int num_fir = num / 100;
if (num == pow(num_th, 3) + pow(num_sec, 3) + pow(num_fir, 3))
{
printf("%d是一个%d到%d之间的水仙花数\n", num, num_init, a);
}
num++;
} while (num <a);
return 0;
}
为什么终端是1是从1到1的水仙花数呢
根据你提供的代码,终端输出从1到1的水仙花数是因为在输入上限值时,你使用了错误的变量名。在第6行,你将输入的上限值存储在变量"a"中,但在第9行的do-while循环中,你使用了错误的变量名"a"作为循环条件。这导致循环只执行一次,即从num_init到num_init+1,因此终端只输出了一个水仙花数。
要解决这个问题,你需要在第9行将循环条件改为"num <= a",这样循环将在num达到上限值a时终止,正确地输出从num_init到a之间的所有水仙花数。以下是修改后的代码:
```c
#include<stdio.h>
#include<math.h>
int main()
{
int a, num_init, num;
printf("请输入水仙花数产生的下限值:");
scanf("%d", &num_init);
printf("请输入水仙花数产生的上限值:");
scanf("%d", &a);
num = num_init;
do {
int num_th = num % 10;
int num_sec = (num / 10) % 10;
int num_fir = num / 100;
if (num == pow(num_th, 3) + pow(num_sec, 3) + pow(num_fir, 3))
{
printf("%d是一个%d到%d之间的水仙花数\n", num, num_init, a);
}
num++;
} while (num <= a);
return 0;
}
```
请注意,我还修正了第7行和第8行的输入语句,以确保正确地读取用户输入的下限值和上限值。