работает на K & R упражнение 1-19: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);
}
}
Моя проблема заключается в том, что выход этой программы дико противоречивы; с учетом того же ввода (несколько строк), иногда он будет печатать каждую строку в обратном направлении с добавленным ведущим пустым пространством, иногда он будет воспроизводить только первую строку в обратном порядке, за которой следует пустые строки, иногда она печатает мусор, а иногда я просто получаю сообщение об ошибке.
Неужели кто-то сталкивается с такой волатильностью, не меняя своего кода? Как это исправить?
В прошлый раз вы опубликовали довольно много связанных вопросов. Пожалуйста, подумайте о том, чтобы использовать другой (и более поздний - C развился много с момента последнего обновления K & R) книги и/или учебника. переполнение стека не является учебным сайтом. – Olaf
Рассмотрите это, во втором цикле вы проверяете нулевые символы в 'ip'. Вы установили нулевой символ, когда вы его читали? –
Вы читаете весь ввод в 1000-байтовый буфер, не проверяя, является ли вход больше 1000 байтов. Вы не '' \ 0'' завершаете строку 'ip', но цикл' x' ищет 'ip [x]! = '\ 0''. И вы не положили '' \ 0'' в конец строки 'rv', что означает, что' printf' будет проходить за конец строки. – user3386109