首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个简单的C\C++有关问题,望高手解答,具体在上面

2012-09-24 
一个简单的C\C++问题,望高手解答,具体在下面:首先,来看一个代码(问题在最下端):#includestdio.h#include

一个简单的C\C++问题,望高手解答,具体在下面:
首先,来看一个代码(问题在最下端):
#include<stdio.h>
#include<stdlib.h>

int main()
{
int n;
int _control=1;
int _cls=0;
void IntoSystem(int);

system("cls");
printf("这里可将10进制转化为n进制数,");

do
{
printf("请输入一个10进制数:");
scanf("%d",&n);
IntoSystem(n);
printf("\n\n---------------\n是否继续?\n");
printf("继续请按【1】,否则程序结束\n");
scanf("%d",&_control);
if(_control==1)
{
printf("是否将刚才的所有数据清除(即清屏) ?\n");
printf("确定清除请按【2】,否则不清除\n");
if( ( _cls=scanf("%d",&_cls) )==2)
system("cls");
printf("\n此时_cls=%d\n",_cls);
printf("\n---> ---> ---> \n\n");
}
}while(_control==1);

printf("\n");
return 0;
}
void IntoSystem(int n)
{
int i,j,m,k=0;
int jz;
int a[32]={0};

printf("你要将10进制转换为多少进制(进制范围2 ~ 16) :");
scanf("%d",&jz);
printf("\n");

for(m=0;m<31;m++)//10进制转换为16进制
{
i=n%jz;
j=n/jz;
n=j;
a[m]=i;
}
for(;m>=0;m--)
{
if( a[m]>=0 && a[m]<=9)
printf("%d",a[m]);
else
switch(a[m])
{
case 10:printf("A");
break;
case 11:printf("B");
break;
case 12:printf("C");
break;
case 13:printf("D");
break;
case 14:printf("E");
break;
case 15:printf("F");
break;
}
if(m % 4 == 0)
printf(" ");
}
}

这个代码里,
1、为什么不可以【清屏】?
2、为什么_cls总是等于1?

请高手赐教!!!

[解决办法]
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF 这是百度百科的说法。。。

if( ( _cls=scanf("%d",&_cls) )==2)

把这一句拆开就应该没问题了把。。。
[解决办法]
scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
[解决办法]
if( ( _cls=scanf("%d",&_cls) )==2) 这句判断有问题,你要看看scanf函数的定义,它的返回值是成功读入的变量个数,你只要它读一个整数,_cls自然一直都是1,所以你可以把这一句改为:

scanf("%d",&_cls);
if(_cls == 2)
{
.....
}
[解决办法]
确实是if( ( _cls=scanf("%d",&_cls) )==2)有问题,你是把scanf()函数的返回值赋值给_cls.
scanf()函数的原型是 int scanf( const char *format, ... ); int代表返回成功赋值的数据项数,你这里输入一个整数,且成功返回,那scanf()函数的返回值就是1了,你把1赋值给_cls,那它自然就一直是1了。
你应该分开写:
scanf("%d",&_cls);
if(_cls ==2)
{
……
}
试一下吧。

热点排行
Bad Request.