如何编写此代码来验证用户输入?

问题描述 投票:0回答:1

所以这是我的代码片段(假设变量声明为 int 类型):

    printf("number of rows: ");
    scanf("%d", &x);

    printf("number of columns: ");
    scanf("%d", &y;


    int sample_arr[x][y];

 
    printf("\nEnter elements of the array:\n\n");

    for (i = 0; i < x; i++){
        printf("Row %d: ", i+1);
        for (j = 0; j < y; j++){
            scanf("%d", &arr[i][j]);
        

代码输出:

行数:3 列数:5

输入数组元素: 第 1 行:1 2 3 // 在这里打印一个空格但仍然可以接收用户输入

预期输出: 行数:3 列数:5

第一行:1 2 3 请确保您输入的元素与构成矩阵的列数相对应!

(再次询问用户) 第 1 行:1 2 3 4 5 ..................... 第 5 行:1 2 3 4 5

我不太确定该怎么做。

c multidimensional-array c99
1个回答
1
投票

您需要查看 scanf 的结果,它返回成功匹配和分配的输入项的数量(在本例中为整数)。这是一个完整的例子:

#include <stdio.h>
#include <stdlib.h>

void ReadInteger(int *result)
{
    int n = scanf("%d", result);
    if (n != 1) {
        fprintf(stderr, "integer expected\n");
        exit(EXIT_FAILURE);
    }
}


void ReadPositiveInteger(int *result)
{
    ReadInteger(result);
    if (*result <= 0) {
        fprintf(stderr, "positive integer expected\n");
        exit(EXIT_FAILURE);
    }
}


int main(void)
{
    // read array
    int x, y;
    printf("number of rows: ");
    ReadPositiveInteger(&x);
    printf("number of columns: ");
    ReadPositiveInteger(&y);    
    int sample_arr[x][y];
    printf("\nEnter elements of the array:\n\n");
    for (int i = 0; i < x; i++) {
        printf("Row %d: ", i + 1);
        for (int j = 0; j < y; j++) {
            ReadInteger(&sample_arr[i][j]);
        }
    }

    // print array
    printf("\nHere is the array:\n\n");
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++) {
            printf("%d ", sample_arr[i][j]);
        }
        putchar('\n');
    }

    return 0;
}

示例输入/输出:

number of rows: 2
number of columns: 3

Enter elements of the array:

Row 1: 1 2 3
Row 2: 3 4 5

Here is the array:

1 2 3 
3 4 5
© www.soinside.com 2019 - 2024. All rights reserved.