Как я могу инициализировать двумерный массив символов с пробелом в c - PullRequest
0 голосов
/ 06 июня 2018

Я занимаюсь алгоритмом.По сути, тестовый пример будет вводить форму числа в нескольких матрицах 3 * 5, и нам нужно получить число, которое представляет форма.

вход (тестовый пример) будет выглядеть так, что представляет0123456789): 0123456789

Итак, я создал матрицу 3 * 5 , и ввожу несколько запусков только для тестирования.Тем не менее, это не сработало.

Поскольку на входе есть место, поэтому я предполагаю, что scanf не будет работать.Я использую get для каждого ряда.

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main(){
       char code[5][3];
       int i;
       for(i = 0; i < 5; i++){
          gets(code[i]);
          printf("%d\n",i);
       }
    }

Итак, если я запустил этот код, я не смог бы выйти из цикла, потому что значение i никогда не превышало 3. Значение i увеличивается до 3, а затем возвращается к 0.

enter image description here

Может кто-нибудь сказать мне, что здесь происходит?

новое обновление: enter image description here

1 Ответ

0 голосов
/ 06 июня 2018

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

НО: в этом коде по крайней мере что-то не так: когда getsчитает 3 символа, он сохраняет 4 символа в памяти из-за окончания \0, добавленного в конце.Таким образом, вы не должны читать напрямую в массиве code;просто прочитайте в другом более длинном буфере и memcpy только 3 символа в массиве.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
    char code[5][3];
    char line[100];
    int i;
    for(i = 0; i < 5; i++){
        fgets(line, sizeof line - 1, stdin);
        memcpy(code[i], line, 3);
        printf("%d\n",i);
    }
}
...