我正在尝试c,此程序假设用户输入10-100范围内的数字,如果他输入任何不符合这些条件的数字,程序将退出并显示错误代码1.满足条件的任何东西,程序将以0退出。下面是代码到目前为止,但拒绝在字符检测中打印正确的错误。
#include <stdio.h>
#include <stdlib.h>
int intGet(int ,int);
int error();
int userIn;
char x;
int main(void) {
printf("Enter a number in between [10 -100]: \n");
x = scanf("%d", &userIn);
intGet(x, userIn);
return EXIT_SUCCESS;
}
int intGet(int min,int max ) {
min = 10;
max = 100;
x = userIn;
if ((x < min) || (x > max)) {
printf("Input out of Range\n");
exit(EXIT_FAILURE);
} else if (x == 0) {
printf("Incorrect input format\n");
exit(EXIT_FAILURE);
} else {
printf("Read %d\n", userIn);
exit(EXIT_SUCCESS);
}
}
int error() {
}
答案 0 :(得分:1)
目前尚不清楚你的问题是什么。你期待什么错误?
您需要整理代码。事情很少。 scanf
返回int
值 - 分配的输入项数。您将返回值分配给char x
。然后将输入值分配给x
。背后的逻辑是什么?你能指望什么?我想你的问题是合乎逻辑的。我建议你:
exit()
语句,改为使用返回值。 exit()
终止该计划。printf
查看正在处理的内容示例:
int main(void) {
printf("Enter a number in between [10 -100]:\n");
int userIn;
int x = scanf("%d", &userIn);
// for debug
printf("Scanned: %d, returned: %d", x, userIn);
int result = intGet(x, userIn);
// analyse the result here
switch (result) {
case RES_SUCCESS:
return SUCCESS;
case ...
}
}
int intGet(int x, int value) {
int const min = 10;
int const max = 100;
if (x != 1) {
return RES_ERROR_NO_INPUT;
}
if (value < min || value > max) {
return RES_ERROR_OUT_OF_RANGE;
}
return RES_SUCCESS;
}
答案 1 :(得分:0)
问题的根本原因是大多数字符的ASCII码介于10 - 100之间。
要解决您的问题,我有一个复杂的解决方案,但它会有所帮助:
步骤进行:
1.声明您的变量“UserIn”为char * OR字符数组
2.在scanf函数中使用%s而不是%d
3.使用strlen(UserIn)计算输入字符串的长度
4.如果长度不等于2或3到错误
5.现在通过错误检查UserIn[0] > 9
是否错误
6.现在通过错误检查UserIn[1] > 9
是否错误
7.现在检查长度是否为3,而UserIn[2] > 9
是否通过错误
8.现在必须使用以下方法将此字符串转换为十进制值:
decimal_UserIn = ((10^2)*UserIn[2])+((10^1)*UserIn[1])+((10^0)*UserIn[0])
9.现在您可以检查它是否适合您的范围(10-100)。
这里我假设您需要十进制格式的输入数据以便进一步处理,否则您可以在步骤5,6和7中直接检查0-9内的字符串。
P.S。我可以帮你提供完整的代码,但我的时间不多了。