0

我的程序编译正确,但运行时出现问题。第一个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);
    }
}
4

3 回答 3

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));
于 2013-06-23T22:28:32.940 回答
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);
    }
}
于 2013-06-23T22:31:38.310 回答
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;
}
于 2013-06-23T22:54:13.867 回答