我写了一个程序来检查回文数.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
main()
{
int n,i;
printf("Please enter a number: ");
scanf("%d", &n);
/* Function Prototypes */
int reverse(int *p);
i=reverse(&n);
printf("Number returned %d",i);
if (i == n)
{
printf("The number is a palindrome");
}
else
{
printf("The number is NOT a palindrome");
}
}
int reverse( int *p)
{
int rev=0;
while(*p !=0)
{
rev=rev*10;
rev=rev+ *p%10;
*p=*p/10;
}
return (rev);
}
Run Code Online (Sandbox Code Playgroud)
但它始终显示"数字不是回文",无论数字是不是回文.
该reverse函数使其参数指向零.参数不需要是指针,n而是通过值传递来解决问题.
这是固定代码,有些重新格式化并添加了错误检查.
#include <stdio.h>
int reverse(int p) {
int rev = 0;
while (p != 0) {
rev = rev * 10;
rev = rev + p%10;
p = p/10;
}
return rev;
}
int main(void) {
int n, i;
printf("Please enter a number: ");
if (scanf("%d", &n) != 1) {
printf("failed to read number.\n");
return 1;
}
i = reverse(n);
if (i == n) {
printf("%d is a palindrome: reversing it gives %d\n", n, i);
} else {
printf("%d isn't a palindrome: reversing it gives %d\n", n, i);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
能够调试程序是一项重要的技能.这是一些初学者技术的良好链接:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/