C входные проблемы - PullRequest
       13

C входные проблемы

1 голос
/ 25 февраля 2011

Я пытаюсь создать простую программу на C. Вот что у меня есть для базовых знаний

#include <stdio.h>
int main()
{
  char input[256];
  while(1)
  {
    printf("Input: ");
    scanf("%s", input);
    if(strcmp(input, "help") == 0)
      printf("HELP STUFF HERE\n");
    else if(strcmp(input, "1") == 0)
      printf("2\n");
    else if(strcmp(input, "test 1") == 0)
      printf("Test 1\n");
    else if(strcmp(input, "test 2") == 0)
      printf("Test 2\n");
    else
      printf("Error");
    }
  return 0;
}

Хотя у меня возникли некоторые проблемы.Прежде всего я не могу использовать пробелы.Если я попробую тест 1, я получу вывод Error.Вторая проблема, с которой я сталкиваюсь, это когда он выводит Error, он печатает его на приглашение ввода пользователя

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Простой ответ - изменить "%s" в scanf на "%[^\n]", что означает чтение всех символов, кроме новой строки.

Лучшим ответом будет изменение на "%255[^\n]", что делаетто же самое, но включает в себя проверку границ.

Лучший ответ - использовать fgets, у которого нет проблем с тем, что именно он будет читать, или затрудняется правильная проверка границ.

2 голосов
/ 25 февраля 2011

Это потому, что когда вы пишете scanf('%s'), на входе test 1 %s сканирует только первый пробел, и вход, который получает ваша программа, на самом деле только test.

Полезной вещью с точки зрения отладки было бы сделать

printf("Error: %s", input)

Так что вы можете видеть, что scanf получает вас.

Если вам нужны целые строки ввода, лучше использовать fgets().

...