Проблема с массивом строк C - PullRequest
0 голосов
/ 03 апреля 2011

Я хочу ввести:

abc def ghi jkl

и вывод должен быть:

abc
def
ghi
jkl

Я хочу сохранить каждыйстрока в массиве, а затем используйте цикл for для печати каждой позиции.

У меня есть этот код:

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

int main()
{
    char vector[100];
    int i = 0;
    int aux = 0;
    while (i < 5)
    {
        scanf("%s", &vector[i]);
        i++;
        aux+= 1;
    }

    for (i=0;i<aux;i++)
    {
        printf("%s\n", &vector[i]);
    }

    return 0;
 }

Что я делаю не так?

Второй вопрос:

Как изменить код, чтобы прекратить чтение моих входов, когда я нажимаю ctrl D и печатаю вывод?

Ответы [ 3 ]

2 голосов
/ 03 апреля 2011

Вы берете адрес персонажа в своем "векторе", вместо того, чтобы заполнить несколько строк. Эти модификации:

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

int main()
{
    char vector[5][100]; /* five times 100 characters, not just 100 characters */
    int i = 0;
    int aux = 0;
    while (i < 5)
    {
        scanf("%s", vector[i]); /* notice the & is gone */
        i++;
        aux+= 1;
    }

    for (i=0;i<aux;i++)
    {
        printf("%s\n", vector[i]); /* notice the & is gone */
    }

    return 0;
 }

Что касается бита ctrl-D, вы можете остановить его чтение в конце ввода, но вам придется управлять получением большого количества ввода (поэтому вам, возможно, придется динамически выделять буфер, в который вы " разобрать "вашу строку с scanf)

0 голосов
/ 03 апреля 2011

У вас есть массив символов (то есть одна строка).

Если вам нужен массив строк, это массив массивов символов:

char vector[NUM_STRINGS][NUM_CHARS];
0 голосов
/ 03 апреля 2011

Вы используете один массив char для хранения нескольких строк.Вы можете использовать 2d массив таким образом:

char vector[STRING_NUM][STRING_MAX_LENGTH]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...