这个c程序有什么问题?调试它表明程序被击中 while (sqroot != 0);
What's wrong with this c program? Debugging it suggests that the program is struck at while (sqroot != 0);
Here's a screenshot of debugging process
我正在学习用 C 语言编程。我试图找出一个数字是否是镜像,但是程序编译无误但没有给出预期的结果。调试程序发现它在 while (sqroot != 0);
// Mirror number
#include <stdio.h>
#include <math.h>
int main() {
int num, rev1, rev2, rem1, rem2, sqr, sqroot;
printf("Enter a number\n");
scanf("%d", & num);
sqr = pow(num, 2);
while (sqr != 0) {
rem1 = sqr % 10;
rev1 = rev1 * 10 + rem1;
sqr = sqr / 10;
}
sqroot = sqrt(rev1);
while (sqroot != 0); {
rem2 = sqroot % 10;
rev2 = rev2 * 10 + rem2;
sqroot = sqroot / 10;
}
if (rev2 == num)
printf("number is mirror");
else
printf("Not a mirror number");
return 0;
}
while (sqroot != 0); { ... }
是一个无限循环。因为 ;
被认为是一个空指令。 if (condition)
或 while (condition)
之后的指令(是否为空)被认为是 if
、[=17] 的 唯一 指令=], for
范围。
和写一样
while (sqroot != 0)
{
; /* Do nothing */
}
/* The scope below doesn't belong to the while */
{
rem2 = sqroot % 10;
rev2 = rev2 * 10 + rem2;
sqroot = sqroot / 10;
}
去掉;
,这个问题应该就解决了。
while (sqroot != 0) {
rem2 = sqroot % 10;
rev2 = rev2 * 10 + rem2;
sqroot = sqroot / 10;
}
初始化为rev1=0和rev2=0.Because没有初始值,rev1和rev2将包含垃圾值,这样会出现运行时间错误。
Here's a screenshot of debugging process
我正在学习用 C 语言编程。我试图找出一个数字是否是镜像,但是程序编译无误但没有给出预期的结果。调试程序发现它在 while (sqroot != 0);
// Mirror number
#include <stdio.h>
#include <math.h>
int main() {
int num, rev1, rev2, rem1, rem2, sqr, sqroot;
printf("Enter a number\n");
scanf("%d", & num);
sqr = pow(num, 2);
while (sqr != 0) {
rem1 = sqr % 10;
rev1 = rev1 * 10 + rem1;
sqr = sqr / 10;
}
sqroot = sqrt(rev1);
while (sqroot != 0); {
rem2 = sqroot % 10;
rev2 = rev2 * 10 + rem2;
sqroot = sqroot / 10;
}
if (rev2 == num)
printf("number is mirror");
else
printf("Not a mirror number");
return 0;
}
while (sqroot != 0); { ... }
是一个无限循环。因为 ;
被认为是一个空指令。 if (condition)
或 while (condition)
之后的指令(是否为空)被认为是 if
、[=17] 的 唯一 指令=], for
范围。
和写一样
while (sqroot != 0)
{
; /* Do nothing */
}
/* The scope below doesn't belong to the while */
{
rem2 = sqroot % 10;
rev2 = rev2 * 10 + rem2;
sqroot = sqroot / 10;
}
去掉;
,这个问题应该就解决了。
while (sqroot != 0) {
rem2 = sqroot % 10;
rev2 = rev2 * 10 + rem2;
sqroot = sqroot / 10;
}
初始化为rev1=0和rev2=0.Because没有初始值,rev1和rev2将包含垃圾值,这样会出现运行时间错误。