scanf из консоли и fscanf из файла - PullRequest
0 голосов
/ 26 ноября 2018

У меня возникли некоторые проблемы со сканером из консоли, я написал несколько кодов об этом и обнаружил, что он не может прочитать весь ввод и автоматически закрывается после ввода первого символа.

int readLetterGridFromConsole(char letterGrid[MAX_GRID][MAX_GRID]) {
    int row, col;
    int gridSize;

    printf("Enter the size of the letter grid:\n");
    scanf("%d", &gridSize);

     if(gridSize < 2 || gridSize > MAX_GRID) {
        printf("DEBUG: gridSize is %d but not between 2 and %d\n", gridSize, MAX_GRID);
        printf("Program terminates.\n");
        exit(1);
    } else {

    printf("Enter the letter grid:\n");


    for(row = 0; row < gridSize; row++) {
        for(col = 0; col < gridSize; col++) {

        scanf(" %c", &letterGrid[row][col]);
        }
    }
    return gridSize;
    }
} 

Я хотел бы сохранитьэти входные данные в 2D-массив (LetterGrid), как я мог решить эту проблему?Спасибо за помощь!

1 Ответ

0 голосов
/ 26 декабря 2018

Но это работает для меня.

Я определяю двумерный массив char x[MAX_GRID][MAX_GRID];, затем передаю его в функцию, затем сканирую входные данные и сохраняю их в матрице x.


Код

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

#define MAX_GRID 2

int readLetterGridFromConsole(char letterGrid[MAX_GRID][MAX_GRID]) {
    int row, col;
    int gridSize;

    printf("Enter the size of the letter grid:\n");
    scanf("%d", &gridSize);

     if(gridSize < 2 || gridSize > MAX_GRID) {
        printf("DEBUG: gridSize is %d but not between 2 and %d\n", gridSize, MAX_GRID);
        printf("Program terminates.\n");
        exit(1);
    } else {

    printf("Enter the letter grid:\n");


    for(row = 0; row < gridSize; row++) {
        for(col = 0; col < gridSize; col++) {
            scanf(" %c", &letterGrid[row][col]);
        }
    }

    //return gridSize;
    }



/*
    printf("Lettr grid\n\n");

    for(row = 0; row < gridSize; row++) {
        for(col = 0; col < gridSize; col++) {
            printf("%c", letterGrid[row][col]);
        }
    }
*/    


} 


int main()
{  
    char x[MAX_GRID][MAX_GRID];//={{1,2},{3,4}};
    readLetterGridFromConsole(x);

    printf("after function\n\n\n");
     for(int row = 0; row < MAX_GRID; row++) {
        for(int col = 0; col < MAX_GRID; col++) {
            printf("%c", x[row][col]);
        }
    }
    return 0;
}

Компиляция и запуск

gcc -Wall -Wextra -pedantic-errors code.c -o code

Выход

Введите размер буквенной сетки: 2

Введите буквенную сетку: abcd

после функции

abcd


Рассматривается как массив в c, передаваемый по ссылке, он может содержать значения даже вне функции readLetterGridFromConsole(x);

...