读书人

一个简单程序引出的几个问题`

发布时间: 2012-02-19 19:43:39 作者: rapoo

一个简单程序引出的几个小问题````
C primer 4th 练习的8.8
作个这样的程序
有加减乘除功能
如果输入的不是数字,要有纠错功能
打印出“该输入不是数字”,然后提示重新输入
在除法项目,如果被除数是0,也要提示错误
重新输入```

这是我在别人提示下写出来的
有几个问题
1 buff[0] != '0 ';是什么意思 atof函数识别不了0??

2 怎么判断数组buff的值是不是0.......
我的程序如果碰到00识别不出来
如果判断第一个元素是0...那小数 0.x 又判断不出来

3
while(getchar() != '\n ')
continue;

if(ch == '\n ')
continue;
这两段代码 分别在什么样的情况下需要加??

4 最后问个基础的题目...
为什么 char a;后
a = '\79 ';是合法的
而 a = '039 ';就不行呢??
后面的 ' '里 为什么只能装下两个字符,而把‘’去掉就可以
---------------------------------------
#include <math.h>
#include <stdlib.h>

int main()
{
char ch;
float num1,num2;
char buff[10],buff1[10];

printf( "Enter the operation of your choice:\n ");
printf( "a. add s. subtract\n ");
printf( "m. multiply d. divide\n ");
printf( "q. quit\n ");
while((ch = getchar()) != 'q ')
{
while(getchar() != '\n ') /* 清空输入行 */
continue;
if(ch == '\n ') /* 不会把回车作为输入 */
continue;
switch(ch)
{
case 'a ':
{
printf( "Enter first number: ");

gets(buff);
num1 = atof(buff);
while (num1 == 0 && buff[0] != '0 ' )
{
printf( "%s ",buff);
printf( " is not an number\n ");


printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff);
num1 = atof(buff);
}

printf( "Enter second number: ");
gets(buff1);
num2 = atof(buff1);
while (num2 == 0 && buff1[0] != '0 ')
{
printf( "%s ",buff1);
printf( " is not an number.\n ");
printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff1);
num2 = atof(buff1);
}
printf( "%f + %f = %.2f\n ",num1,num2,num1 + num2);
}
break;


case 's ':
{
printf( "Enter first number: ");

gets(buff);
num1 = atof(buff);


while (num1 == 0 && buff[0] != '0 ')
{
printf( "%s ",buff);
printf( " is not an number\n ");
printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff);
num1 = atof(buff);
}

printf( "Enter second number: ");
gets(buff1);
num2 = atof(buff1);
while (num2 == 0 && buff1[0] != '0 ')
{
printf( "%s ",buff1);
printf( " is not an number.\n ");
printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff1);
num2 = atof(buff1);
}
printf( "%f - %f = %.2f\n ",num1,num2,num1 - num2);
}
break;



case 'm ':
{
printf( "Enter first number: ");

gets(buff);
num1 = atof(buff);
while (num1 == 0 && buff[0] != '0 ')
{
printf( "%s ",buff);
printf( " is not an number\n ");
printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff);
num1 = atof(buff);
}

printf( "Enter second number: ");
gets(buff1);
num2 = atof(buff1);
while (num2 == 0 && buff1[0] != '0 ')
{
printf( "%s ",buff1);
printf( " is not an number.\n ");
printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff1);


num2 = atof(buff1);
}


printf( "%f * %f = %.2f\n ",num1,num2,num1 * num2);
}
break;

case 'd ':
{
printf( "Enter first number: ");

gets(buff);
num1 = atof(buff);
while (num1 == 0 && buff[0] != '0 ')
{
printf( "%s ",buff);
printf( " is not an number\n ");
printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff);
num1 = atof(buff);
}

printf( "Enter second number: ");
gets(buff1);
num2 = atof(buff1);
while (num2 == 0 && buff1[0] != '0 ')
{
printf( "%s ",buff1);


printf( " is not an number.\n ");
printf( "Enter a number,such as 2.5,-1.78E8,or 3: ");
gets(buff1);
num2 = atof(buff1);
}
while(buff1[0] == '0 ' && buff1[1] == '\0 ') /* 当输入为0时 */
{
printf( "Enter a number other than 0: ");
gets(buff1);
num2 = atof(buff1);
}

printf( "%f / %f = %.2f\n ",num1,num2,num1 / num2);
}
break;

default :
printf( "Please enter a right character.\n ");
}

printf( "Enter the operation of your choice:\n ");
printf( "a. add s. subtract\n ");
printf( "m. multiply d. divide\n ");
printf( "q. quit\n ");

}
printf( "Bye!\n ");



getch();
return 0;
}



[解决办法]
浮点数是不是0的判断是(num1> -0.000001 && num1 <0.000001)
判断是不是数字应该还有asccii码值判断,看字符是不是在0~9之间,有没有小数点,正负号等
  

[解决办法]
while (num1 == 0 && !isdigit(buff[0]))
判断第一个字符是否为0
atof对于第一个字符是非数字会返回0
对于0.XX 等也会返回0

读书人网 >C++

热点推荐