当前位置: 代码迷 >> C语言 >> [原创]行结课错误?
  详细解决方案

[原创]行结课错误?

热度:178   发布时间:2006-02-24 12:34:00.0
[原创]行结课错误?

给一个不多于5位数的正整数按逆序打印出来,如输入123输出321
#include<stdio.h>

void main()
{
long n,a;
int n1,n2,n3,n4,n5,b,c,d;

scanf("%d",&n);

if(n >= 0 && n < 100000)
{
if ( n >= 10000 && n <100000 )
{
a = n % 10000 ;
b = a % 1000 ;
c = b % 100 ;
d = c % 10 ;
n1 = (n - a) / 10000;
n2 = (a - b) / 1000;
n3 = (b - c) / 100;
n4 = (c - d) / 10;
n5 = d ;
printf("\nThe number =%d%d%d%d%d\n",n5,n4,n3,n2,n1);
}
else if ( n >= 1000 && n < 10000 )

{ a = n % 1000;
b = n % 100;
c = n % 10;
n1 = (n - a) / 1000;
n2 = (a - b) / 100;
n3 = (b - c) / 10;
n4 = c;
printf("\nThe number =%d%d%d%d\n",n4,n3,n2,n1);
}
else if ( n>=100 && n < 1000)
{
a = n % 100;
b = a % 10;
n1 = (n - a) / 100;
n2 = (b - a) / 10;
n3 = b;
printf("\nThe number =%d%d%d\n",n3,n2,n1);
}
else if ( n >= 10 && n < 100)
{
a = n % 10;
n1 = (n - a) / 10;
n2 = a;
printf("\nThe number =%d%d\n",n2,n1);
}
else
{
a = n;
printf("\nThe number =%d%d\n", a);
}
}
else printf("\nThe number out control\n");
}
为什么运行结果不对,输入98765是结果不对,但输入较小的数字如12345是是正确的。
在单步调试是全部错误。


----------------解决方案--------------------------------------------------------

输入有点小问题
#include<stdio.h>

void main()
{
long n,a;
int n1,n2,n3,n4,n5,b,c,d;

scanf("%d",&n); /*改为 scanf("%ld",&n); */

if(n >= 0 && n < 100000)
{
if ( n >= 10000 && n <100000 )
{
a = n % 10000 ;
b = a % 1000 ;
c = b % 100 ;
d = c % 10 ;
n1 = (n - a) / 10000;
n2 = (a - b) / 1000;
n3 = (b - c) / 100;
n4 = (c - d) / 10;
n5 = d ;
printf("\nThe number =%d%d%d%d%d\n",n5,n4,n3,n2,n1);
}
else if ( n >= 1000 && n < 10000 )

{ a = n % 1000;
b = n % 100;
c = n % 10;
n1 = (n - a) / 1000;
n2 = (a - b) / 100;
n3 = (b - c) / 10;
n4 = c;
printf("\nThe number =%d%d%d%d\n",n4,n3,n2,n1);
}
else if ( n>=100 && n < 1000)
{
a = n % 100;
b = a % 10;
n1 = (n - a) / 100;
n2 = (b - a) / 10;
n3 = b;
printf("\nThe number =%d%d%d\n",n3,n2,n1);
}
else if ( n >= 10 && n < 100)
{
a = n % 10;
n1 = (n - a) / 10;
n2 = a;
printf("\nThe number =%d%d\n",n2,n1);
}
else
{
a = n;
printf("\nThe number =%d%d\n", a);
}
}
else printf("\nThe number out control\n");
}

有更简单的,你的太复杂了。没有必要这么多if和else
好好想一想吧。


----------------解决方案--------------------------------------------------------
我是用字符串处理的。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 12
main()
{
long n;
char str[MAX],*temp;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
ltoa(n,str,10);
temp=str;
while (*temp!='\0')
temp++;
while (temp--!=str)
printf("%c",*temp);
getch();
}
----------------解决方案--------------------------------------------------------

下面不用字符串处理的。
#include <stdio.h>
#include <conio.h>
#define MAX 10
main()
{
int i=0,bit;
int data[MAX];
long n;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
while (n!=0)
{
data[i]=n%10;
n/=10;
i++;
}
bit=i;
for (i=0;i<bit;i++)
printf("%d",data[i]);
getch();
}


----------------解决方案--------------------------------------------------------
cordier 谢了
----------------解决方案--------------------------------------------------------
main()
{
char ch[5];
int i;
for(i=0;i<5;i++)
ch[i]=getche();
printf("\n");
for(i=4;i>=0;i--)
printf("%c",ch[i]);
}

----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 12
main()
{
long n;
char str[MAX],*temp;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
ltoa(n,str,10);
temp=str;
while (*temp!='\0')
temp++;
while (temp--!=str)
printf("%c",*temp);
getch();
}
这段在编译时出现声明语法错
----------------解决方案--------------------------------------------------------
以下是引用wwiilla在2006-2-24 16:50:00的发言:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 12
main()
{
long n;
char str[MAX],*temp;
system("cls");
do
{
printf("n=");
scanf("%ld",&n);
}while(n<0||n>999999999);
ltoa(n,str,10);
temp=str;
while (*temp!='\0')
temp++;
while (temp--!=str)
printf("%c",*temp);
getch();
}
这段在编译时出现声明语法错

把system("cls");这个去掉就行了。
在BC++好不支持这个函数。BC++就好像是内镶了一个界面,已不是在DOS下了。

不过用TC可以不加任何修改通过!


――――――――――――――――――――――――――――――――

在下刚才写的那个程序好像太慌忙了,错误的理解为输入一个5位数将其逆顺排序。
下面已经改好:

main()
{
char ch[5],k;
int i;
for(i=0;i<5;i++)
{k=getche();if(k==13) break;ch[i]=k;}
printf("\n");
for(i-=1;i>=0;i--)
printf("%c",ch[i]);
}


----------------解决方案--------------------------------------------------------

3-4楼首先感谢你cordier,while(n<0||n>999999999);→while(n<0||n>99999);为好
system("cls");没太多的必要(这个程序中)


----------------解决方案--------------------------------------------------------
  相关解决方案