0

我目前正在试验 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() {

}
4

2 回答 2

1

目前尚不清楚您的问题是什么。你期望什么错误?

你需要整理你的代码。有几件事。scanf返回intvalue - 分配的输入项数。您将返回值分配给char x. 然后将输入值分配给x。背后的逻辑是什么?你能指望什么?我想你的问题是合乎逻辑的。我建议你:

  1. 分别处理返回值和输入值
  2. 删除exit()语句,改用返回值。exit()终止程序。
  3. 删除全局变量
  4. 如果上述方法无助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;
}
于 2013-09-17T03:12:47.637 回答
0

问题的根本原因是大多数字符的 ASCII 码在 10 到 100 之间。

为了解决您的问题,我有一个复杂的解决方案,但它会有所帮助:

脚步:

1.将变量“UserIn”声明为 char * OR 字符数组

2.在 scanf 函数中使用 %s 而不是 %d

3.使用strlen(UserIn)计算输入字符串的长度

4.如果长度不等于 2 OR 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 内的字符串。

PS我可以帮你提供完整的代码,但我的时间不多了。

于 2013-09-17T10:47:54.863 回答