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
#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 に答える
0

xおよびを保持するためのメモリが割り当てられていませんy

それらをスタックに割り当ててから、&演算子のアドレスを使用してそのメモリへのポインターを取得します。

#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;
}

xポインタにしたい場合yは、使用する前に有効なメモリを割り当てる必要があります。

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 に答える