Я работал над некоторыми книгами на C, пытаясь получить мои C-ноги (морские ноги! Получите это?!). Я только что закончил упражнение 1-9 из книги K & R, которая предназначена для "написания программы для копирования ее ввода на свой вывод, заменяя каждую строку одной или несколькими пробелами одним пробелом". У меня вопрос о том, что происходит с моим кодом, хотя -
#include <stdio.h>
//Copy input to output. Replace each string of multiple spaces with one single space
int main(int argc, char *argv[]){
int ch, lch; // Variables to hold the current and last characters, respectively
/* This loop should 'put' the current char, then store the current char in lc,
* loop back, 'get' a new char and check if current and previous chars are both spaces.
* If both are spaces, do nothing. Otherwise, 'put' the current char
*/
for(ch = getchar(); (ch = getchar()) != EOF; lch = ch){
if(ch == ' ' && lch == ' ')
;
else putchar(ch);
}
return 0;
}
В основном это работает, за исключением самого первого ввода символа. Например, если первый ввод строки
"This is a test"
мои кодовые выходы
"his is a test".
После сброса самого первого символьного ввода программа работает последовательно, чтобы соответствовать требованиям упражнений.
Может ли кто-нибудь дать мне представление о той ошибке, которую я совершил в своей петле, что вызвало проблему? Любые другие советы также приветствуются.