检查在某个限制之间的用户输入,如果没有再次询问,直到输入正确的输入

时间:2013-06-23 22:26:53

标签: c pointers segmentation-fault user-input

我的程序编译正确但我运行时遇到问题。第一个scanf(宽度)工作正常,但当我尝试使用另一个scanf(高度)时,我得到分段错误11。 我可以将此程序用于而不使用指针。 (我还需要限制检查功能,因为我必须在我的程序中一次又一次地使用它。)

#include <stdio.h>
void limitChecker(int x, int y, int* input);
int main(void)
{
    int* x;
    int* y;
    printf("Enter the width of the windows. (3 - 5) : ");
    scanf("%d", x);
    limitChecker(3, 5, x);
    printf("width: %d \n", *x);
    printf("Enter the height of the windows. (2 - 4) : ");
    scanf("%d", y);
    limitChecker(2, 4, y);
    printf("Height: %d \n", *y);

}

void limitChecker(int x, int y, int* input)
{
    while(!(*input>=x && *input<=y))
    {
    printf("Please enter a value between (%d - %d): ",x,y);
    scanf("%d", input);
    }
}

3 个答案:

答案 0 :(得分:0)

您没有分配内存来保留xy

在堆栈上分配它们,然后使用运算符的&地址获取指向该内存的指针。

#include <stdio.h>
int limitChecker(int x, int y, int input);
int main(void)
{
    int x;
    int y;
    printf("Enter the width of the windows. (3 - 5) : ");
    scanf("%d", &x);
    x = limitChecker(3, 5, x);
    printf("width: %d \n", x);
    printf("Enter the height of the windows. (2 - 4) : ");
    scanf("%d", &y);
    y = limitChecker(2, 4, y);
    printf("Height: %d \n", y);

}

int limitChecker(int x, int y, int input)
{
    while(!(input>=x && input<=y))
    {
    printf("Please enter a value between (%d - %d): ",x,y);
    scanf("%d", &input);
    }

    return input;
}

如果您希望xy成为指针,那么在使用它们之前必须为它们分配有效的内存。

int * x = malloc(sizeof(int));
int * y = malloc(sizeof(int));

答案 1 :(得分:0)

您需要使用scanf()中使用的变量的引用。

例如,scanf("%d", &x);

scanf()的第一个参数用于数据类型,以下参数是指向您希望存储用户输入的位置的指针列表。

更正后的代码:

#include <stdio.h>
void limitChecker(int x, int y, int* input);
int main(void)
{
    int x;
    int y;
    printf("Enter the width of the windows. (3 - 5) : ");
    scanf("%d", &x);
    limitChecker(3, 5, &x);
    printf("width: %d \n", x);
    printf("Enter the height of the windows. (2 - 4) : ");
    scanf("%d", &y);
    limitChecker(2, 4, &y);
    printf("Height: %d \n", y);

}

void limitChecker(int x, int y, int* input)
{
    while(!(*input>=x && *input<=y))
    {
    printf("Please enter a value between (%d - %d): ",x,y);
    scanf("%d", input);
    }
}

答案 2 :(得分:0)

#include <stdio.h>

int limitChecker(int x, int y, int value){
    return x <= value && value <= y;
}

int inputInt(void){
    //x >= 0
    int x = 0;
    int ch;
    while('\n'!=(ch=getchar())){
        if('0'<=ch && ch <= '9')
            x = x * 10 + (ch - '0');
        else 
            break;
    }
    return x;
}

int main(void){
    int x, y;
    do{
        printf("Enter the width of the windows. (3 - 5) : ");
        x = inputInt();
    }while(!limitChecker(3, 5, x));
    printf("width: %d \n", x);
    do{
        printf("Enter the height of the windows. (2 - 4) : ");
        y = inputInt();
    }while(!limitChecker(2, 4, y));
    printf("Height: %d \n", y);
    return 0;
}