Как перестать вставлять значения при вводе? - PullRequest
0 голосов
/ 22 февраля 2019

Если пользователь должен вставить несколько значений, а затем он хочет остановить, как я могу это сделать?

Например, пользователь должен вставить значения с плавающей запятой, но если он вставит букву, цикл останавливается.Как я могу создать что-то вроде этого:

for(;;){
    scanf("%f", &n);
    if(!isdigit(n))
         break;
}

Ответы [ 4 ]

0 голосов
/ 22 февраля 2019

Вы можете использовать этот очень простой синтаксис, если вы ожидаете ввода типа запроса, когда нет необходимости запоминать значения

    float n;
    while(scanf("%f",&n)){
    printf(" %f",n);
    }

Это сломает ввод символов.
Если вам нужно большеМеры предосторожности использовать ответ Jabberwocky.

0 голосов
/ 22 февраля 2019

Попробуйте с этим кодом ... Я думаю, что он будет работать нормально:

#include <stdio.h>

int main() {

  float n;
  int check = 0;
  for( ;; ) {
    check = scanf("%f", &n);
    if (check != 1) break;
    printf("%f\n ", n);
  }

  return 0;
}
0 голосов
/ 22 февраля 2019

scanf - плохой выбор для интерактивного ввода данных пользователем.Тем более, что если пользователь наберет что-то, чего scanf не ожидает, этот ввод останется во внутреннем буфере ввода и, скорее всего, вызовет проблемы в следующих scanf с дальше в программе.

Я быпойти на что-то вроде этого:

#include <stdio.h>

int main(int argc, char * argv[])
{
  float n;
  char input[100];
  for (;;) {
      fgets(input, sizeof(input), stdin);
    if (sscanf(input, "%f", &n) != 1)
      break;

    printf("User input = %f\n", n);
  }

  printf("Last line entered by user: %s", input);  
}
0 голосов
/ 22 февраля 2019

Вы можете использовать scanf возвращаемое значение, чтобы разорвать цикл.

Пример:

for(;;){
     if(scanf("%f", &n) != 1)
         break;
}

scanf вернет 1, если оно успешно прочиталоплавать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...