Работал над упражнением K&R 1-19:
Напишите программу, которая переворачивает ввод построчно.
Написал следующую программу:
#include <stdio.h>
#define MAXLINE 1000
main () {
int c, x, y, z;
char ip[MAXLINE];
char ln[MAXLINE];
char rv[MAXLINE];
for (x = 0;(c=getchar()) != EOF; ++x)
ip[x] = c;
for (x = 0; ip[x] != '\0'; ++x) {
for (y = 0; ip[x] != '\n'; ++y) {
ln[y] = ip[x];
++x;
}
for (z = 0; y != -1; ++z) {
rv[z] = ln[y];
--y;
}
printf("%s\n", rv);
}
}
Моя проблема в том, что вывод этой программы крайне противоречив; учитывая тот же (несколько строк) ввод, иногда он будет печатать каждую строку в обратном порядке с добавленным начальным пробелом, иногда он будет воспроизводить только первую строку в обратном порядке, за которой следуют пустые строки, иногда он печатает мусор, а иногда я просто получаю сообщение об ошибке.
Кто-нибудь сталкивался с такой волатильностью раньше, не меняя свой код? Как это исправить?
ip
. Вы установили нулевой символ, когда читали это? - person Jeff Mercado   schedule 25.02.2016'\0'
завершили строкуip
, но циклx
ищетip[x] != '\0'
. И вы не поставили'\0'
в конце строкиrv
, а это значит, чтоprintf
будет идти дальше конца строки. - person user3386109   schedule 25.02.2016\n
, чтобы найти конец строки. И этот же цикл должен проверять количество символов в строке, чтобы входной буфер не переполнялся. - person user3629249   schedule 25.02.2016main()
Все они имеют возвращаемый тип и (если только вы не работаете на «голом железе» без ОС, этот возвращаемый тип будетint
- person user3629249   schedule 25.02.2016