Когда пользователь не вводит данные, я получаю сообщение «Ошибка сегментации: 11». Он отлично работает, когда пользователь вводит данные. Как я могу это исправить? - PullRequest
0 голосов
/ 04 октября 2019

Его while (1) -петл непрерывно запрашивает ввод у пользователя, пока не завершится. Я хочу, чтобы он запрашивал ввод у пользователя, и если после нажатия клавиши ввода ничего не вводится, он должен запросить ввод еще раз.

int main(int argc, char* argv[]) {
   char input[100];
   while (1) {
      fgets(input, 40, stdin);
   }
} 

Я инициализировал ввод как char input[100]; Я также пытался выполнить

char *input = (char *)malloc(10*sizeof(char));

но это не помогает.

Работает нормально, когда пользователь вводит данные. Как я могу это исправить?

1 Ответ

1 голос
/ 04 октября 2019

Из того, что я прочитал, я думаю, что ваша программа делает

#include <stdio.h>
int main(int argc, char* argv[]) {
   char input[100];
   while (1) {
      char* x=fgets(input, 40, stdin);
      printf("Hello%c\n",*x); 
   }
} 

Со страницы руководства fgets

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

fgets() возвращает s в случае успеха и NULL в случае ошибки или в случае окончания файла, когда символы не были прочитаны.

Когда fgets() встречает конец файла, возвращаетсянулевой указатель, если вы попытаетесь следовать ему, произойдет ошибка сегментации.

Что вам нужно сделать, это проверить возвращаемое значение

#include <stdio.h>
int main(int argc, char* argv[]) {
   char input[100];
   char* x;
   while (x=fgets(input, 40, stdin)) {
      printf("Hello%x\n",x); 
   }
} 

Обратите внимание на присвоение в while (x=fgets(...)) предназначен

...