来自控制台的scanf和来自文件的fscanf

时间:2018-11-26 05:45:49

标签: printf scanf

我在控制台上遇到了有关scanf的一些问题, 我写了一些有关它的代码,发现它不能读取所有输入并在输入第一个字符后自动关闭。

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 :(得分:0)

但这对我有用。

我定义了一个二维数组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

     

输入字母网格:   一种   b   C   d

     

后功能

     

abcd


考虑为c中的数组通过引用传递,即使在函数readLetterGridFromConsole(x);之外,它也可以保存值