1.
word1
и word2
- это просто массивы char
:
char word1[21], word2[21];
Таким образом:
while (fgets(text, sizeof(text), stdin))
{
sscanf(text, "%s %s", &word1[line], &word2[line]);
line++;
}
запишет входные строки различных строк последовательно к следующему символьному элементу в wordN
, а не к другой word
памяти.
Это приводит к выводу
dblack cwhite
.
black
записывается, начиная со второго элемента word1
, где dog
ранее хранилось, начиная с первого элемента. white
записывается начиная со второго элемента word2
, где cat
был сохранен ранее, начиная с первого элемента. Оба используют одну и ту же память, за исключением первого элемента.
2.
while (fgets(text, sizeof(text), stdin))
- Условие всегда будет истинным, если не возникла ошибка I/O
.
Если вы просто хотите бесконечно печатать 2 слова, заданные в качестве ввода для каждой строки (как вы сказали) и использовать fgets()
для перехвата, используйте это вместо этого. Это намного компактнее:
#include <stdio.h>
int main(void)
{
char word1[50], word2[50], line_text[50];
while (fgets(line_text, sizeof(line_text), stdin))
{
sscanf(line_text, "%s %s", word1, word2);
printf("%s %s\n", word1, word2);
}
return 0;
}
Вход:
hello world
dog cat
black white
apple banana
Выход:
hello world
dog cat
black white
apple banana