如何让getchar()读取负数?

时间:2016-02-07 22:05:00

标签: c

我正在编写一个可以计算方形,立方体和圆形区域的程序。程序需要显示错误消息,并允许用户输入新选项,如果他们输入菜单中未包含的内容。我的问题是如果他们输入任何东西包括我的菜单选项,那么程序仍然执行。 (即-1,23,344)我想知道如何让它在第一个字符后忽略任何东西或者读取整个字符串。或者如果有比getchar()更好的东西。我愿意接受任何解决方案!谢谢!

#include <stdio.h>
#include <stdlib.h>

int main(void) {

int choice;
int lengthsq;
int areasq;
int lengthcube;
int areacube;
int radius;
double circlearea;

printf("Area Calculation\n");
printf("(1) Square\n");
printf("(2) Cube\n");
printf("(3) Circle\n");
fputs("Please make a selction: ", stdout);

while((choice = getchar()) != '\n')

switch (choice) {

  case '1':
    printf("\nPlease enter the length: ");
      scanf("%d", &lengthsq);
      while(lengthsq <= 0){
        printf("Error! Please enter a positive number: ");
          scanf("%d", &lengthsq);
      }
    areasq = lengthsq * lengthsq;
    printf("The area of the square is %d.", areasq);
    return 0;

  case '2':
    printf("\nPlease enter the length: ");
      scanf("%d", &lengthcube);
      while (lengthcube <= 0) {
        printf("Error! Please enter a positive number: ");
          scanf("%d", &lengthcube);
      }
    areacube = 6 * lengthcube * lengthcube;
    printf("The surface area of the cube is %d.\n", areacube);
    return 0;

  case '3':
    printf("\nPlease enter the radius: ");
      scanf("%d", &radius);
      while(radius <= 0){
        printf("Error! Pleae enter a postive number: ");
          scanf("%d", &radius);
      }
    circlearea = 3.14159 * radius * radius;
    printf("The area of the circle is %.2f.\n", circlearea);
    return 0;

  case '\n':
  case '\t':
  case ' ':
    break;

  default:
    printf("\nInvalid choice entered.\n");
    fputs("Enter a new choice: ", stdout);
    break;

}

}

1 个答案:

答案 0 :(得分:1)

您可以为短划线添加另一个开关案例,它会切换某种负面标志,然后读取您已经在做的数字。如果你不喜欢引入这样的标志,那么最好的选择是使用fgets,它返回整个输入行。但这有一个缺点,你需要解析输入。即做一些字符串操作,这可能比简单的标志参数稍微复杂一些。

另一方面,从您附加的代码中,我推断出唯一有效的输入仅包含数字(整数)。你可以用scanf读取一个整数。