Я написал код... Он правильно принимает ввод, но во время выполнения выдает неполные значения. пожалуйста помоги.
#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;
}
Я пробовал следующее: ВХОД вода Ньюуотер камуфляж Норвегия полиски
ВЫХОД вода@
Индекс i
начинается с 0 для каждого вызова функции. Не следует ли перезапустить его с 0 для каждой строки?
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! Пожалуйста, посетите тур , чтобы узнать, как работает этот сайт, и прочитайте « Как ответить ». Затем вернитесь и отредактируйте свой ответ, чтобы предоставить более подробную информацию о том, что это за ошибка и как вы ее устранили. (Отказ от ответственности: я не голосовал против.)
Это самое подходящее время, чтобы начать отладку. Продвинутые разработчики C могут использовать отладчик, такой как gdb, но новичкам это может быть сложно. Попробуйте регулярно печатать значения переменных, чтобы регистрировать их состояние (например, используя
printf()
). В конце концов вы обнаружите глупую ошибку, которую допустили в функцииinput()
.