Я пытаюсь ввести строки в 2D-массив, используя функции. Я написал код, но понимаю, в чем проблема

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

#include <stdio.h>
int input(char str[5][100],int n)
{
    int ch, i=0,j;
    for (j=0;j<5;j++)
    {
        while ((ch=getchar()) !='\n')
        {
            if (i<n)
            {
                str[j][i++] = ch;
            }
        }
        str[j][i]='\0';
    }
    return i;
}

int main() {
    
    char str[5][100];
    int n=input(str,10);
    for (int i=0;i<5;i++)
    {
        printf("%s",str[i]);
    
    }

    return 0;
}

Я пробовал следующее: ВХОД вода Ньюуотер камуфляж Норвегия полиски

ВЫХОД вода@

Это самое подходящее время, чтобы начать отладку. Продвинутые разработчики C могут использовать отладчик, такой как gdb, но новичкам это может быть сложно. Попробуйте регулярно печатать значения переменных, чтобы регистрировать их состояние (например, используя printf()). В конце концов вы обнаружите глупую ошибку, которую допустили в функции input().

NRagot 28.06.2024 09:23

Индекс i начинается с 0 для каждого вызова функции. Не следует ли перезапустить его с 0 для каждой строки?

BoP 28.06.2024 09:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
  • Вы никогда не сбрасываете i в ноль в цикле, отсюда и ошибка.
  • Нет смысла возвращать что-либо из этой функции в том виде, в котором она написана, что вообще означает это число? Общее количество введенных символов, самая длинная подстрока, что?
  • Не изобретайте свои собственные непонятные стили кодирования, а используйте имя i для самого левого измерения массива, что является соглашением, затем j и так далее.

Фиксированный код может выглядеть примерно так:

void input (char str[5][100], int n)
{
    int ch;
    for (i=0;i<5;i++)
    {
        for(j=0; (ch=getchar())!='\n' && j<n; j++)
        {
            str[i][j] = ch;
        }
        str[i][j]='\0';
    }
}

0 присвоен i внутри цикла for.

#include <stdio.h>

int input(char str[5][100], int n) {
    int ch, i, j;
    for (j = 0; j < 5; j++) {
        i = 0;
        while ((ch = getchar()) != '\n') {
            if (i < n) {
                str[j][i++] = ch;
            }
        }
        str[j][i] = '\0';
    }
    return i;
}

int main() {
    char str[5][100];
    int n = input(str, 100); 
    for (int i = 0; i < 5; i++) {
        printf("%s\n", str[i]);
    }
    return 0;
}

Добро пожаловать в StackOverflow! Пожалуйста, посетите тур , чтобы узнать, как работает этот сайт, и прочитайте « Как ответить ». Затем вернитесь и отредактируйте свой ответ, чтобы предоставить более подробную информацию о том, что это за ошибка и как вы ее устранили. (Отказ от ответственности: я не голосовал против.)

the busybee 01.07.2024 14:29

Другие вопросы по теме