作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序,可以计算正方形、立方体和圆形的面积。如果用户输入菜单中未包含的内容,程序需要显示错误消息并允许用户输入新的选择。我的问题是,如果他们输入任何包含我的菜单选项的内容,那么程序仍然会执行。 (即-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;
}
}
最佳答案
您可以为破折号添加另一个开关盒,这将切换某种否定标志,然后像您已经在做的那样读取一个数字。如果您不喜欢引入这样的标志,那么最好的选择是使用 fgets,它返回整个输入行。但这有一个缺点,即您需要解析输入。 IE。进行一些字符串操作,这可能比简单的标志参数稍微复杂一些。
另一方面,从您附加的代码中,我推断出唯一有效的输入仅由数字(整数)组成。您可以使用 scanf 读取一个整数。
关于c - 如何让getchar()读取负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259700/
我是一名优秀的程序员,十分优秀!