Я написал программу, которая сначала сохраняет произвольное количество строк текста от пользователя.После этого он проверяет, когда пришло новое слово, и если это произойдет, то печатает его в новой строке.Ниже приведен мой код:
#include<stdio.h>
#define IN 1 //inside a word
#define OUT 0 //outside a word
int main()
{
char s[100]; //storing the string entered by user
int c; //getchar reading variable
int i=0; //iterating variable
while((c=getchar())!=EOF)
{
s[i++]=c;
}
s[i]='\0'; //end of string
i=0;
int p=0; //stores the start of the word
int current=OUT; //flag to indicate if program is inside or outside a word
while(s[i]!='\0')
{
if(current==OUT) //when program is outside a word
{
if(s[i]!=' ' || s[i]!='\n' || s[i]!='\t') //word found
{
p=i; //store starting position of word
current=IN;
}
}
else if(current==IN) //program is inside a word
{
if(s[i]==' ' || s[i]=='\n' || s[i]=='\t') //end of word found
{
current=OUT; //flag now outside the word
for(int j=p;j<i;j++) //print from starting position of word
{
printf("%c",s[j]);
}
printf("\n"); //go next line
}
}
++i; //incremnent the iterator variable
}
return 0;
}
Моя программа работает хорошо, если я просто правильно ввел строку, то есть без лишних пробелов или новых строк.Но если я введу строку следующим образом ( обратите внимание на лишние пробелы и новые строки ):
* Я мальчик
Я отправился в Японию * /
Затем он печатает эти дополнительные символы новой строки и пробелы вместе со словом, что, по моему мнению, не должно происходить из-за флагов IN и OUT.Вывод выглядит так: введите описание изображения здесь Я прошу вас, пожалуйста, помочь мне.
Я знаю, что я могу легко это сделать с помощью метода putchar (), проверяющего один символкогда-то, но мне просто любопытно, что я делаю неправильно в этой реализации.