Остановка пользовательского ввода с помощью клавиши ввода в C - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь написать программу, которая получает строки, используя fgets, но по какой-то причине я не могу получить ее до go после стадии пользовательского ввода. Ввод должен прекратиться, как только пользователь введет «пустую строку», ie. клавиша Enter (\ n), но даже когда эта клавиша нажата, l oop продолжается.

Вот проблемная c часть моего кода:

char array[100][256];
for (int i = 0; array[i] != '\n'; i++)
{
    fgets(array[i], 256, stdin);
}

100 и 256 представляют максимальное количество ожидаемых строк и символов соответственно.

Кто-нибудь знает, где я ошибся?

1 Ответ

1 голос
/ 08 января 2020

Здесь ваш код исправлен с минимальными изменениями, пояснения в комментариях. Обратите внимание, что это не очень хороший способ решения вашей проблемы, например, длинные строки могут работать не так, как вы хотите (они будут разбиты на несколько array строк).

char array[100][256];
memset(array, 0, sizeof array); // initialize the memory
int i = 0;
while(i<100) // avoid overflow of lines, also while may be clearer than for loop
{
    if(!fgets(array[i], 256, stdin)) break; // detect read failure
    if(array[i][0] == '\n') break; // got empty line
    // Note [0] above to test first char of line i
    ++i;
}
if (i==100) { /* too many lines */ }
else if (array[i][0] == 0) { /* read failure */  }
else {  /* indexes 0...i-1 contain data, index i contains empty line */ }
...