Как читать пробелы с помощью scanf в c?

Проблема: Мне нужно уметь определять, когда два пробела встречаются последовательно.

I прочитал следующие вопросы:

как читать строку из файла с разделителями \ n

как читать scanf с пробелами

И мне известно о проблемах scanf: http: // c-faq .com / stdio / scanfprobs.html

Ввод будет в следующем формате:

1 5 3 2  4 6 2  1 9  0

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

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

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

while ( scanf ( "%d", &x ) == 1 )

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

И как только я получу пробел, я не знаю как сказать:

if ((input == "whitespace") && (previousInput == "whitespace"))
  ya da ya da
else (input == "whitespace")
  ya da ya da
else 
  ya da ya da

Я ценю ваше время и благодарю вас за вашу помощь.

Извлеченный урок:

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

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

while ( scanf ( "%d", &x ) == 1 )

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

И как только я получу пробел, я не знаю как сказать:

if ((input == "whitespace") && (previousInput == "whitespace"))
  ya da ya da
else (input == "whitespace")
  ya da ya da
else 
  ya da ya da

Я ценю ваше время и благодарю вас за вашу помощь.

Извлеченный урок:

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

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

while ( scanf ( "%d", &x ) == 1 )

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

И как только я получу пробел, я не знаю как сказать:

if ((input == "whitespace") && (previousInput == "whitespace"))
  ya da ya da
else (input == "whitespace")
  ya da ya da
else 
  ya da ya da

Я ценю ваше время и благодарю вас за вашу помощь.

Извлеченный урок: Я нахожусь в той точке, где решить проблему с scanf на этом этапе, вероятно, будет проще. Однако, если это не так, использование fgets, strtok и atoi выполнит большую часть работы, но мне все равно нужно идентифицировать два пробела подряд.

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

while ( scanf ( "%d", &x ) == 1 )

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

И как только я получу пробел, я не знаю как сказать:

if ((input == "whitespace") && (previousInput == "whitespace"))
  ya da ya da
else (input == "whitespace")
  ya da ya da
else 
  ya da ya da

Я ценю ваше время и благодарю вас за вашу помощь.

Извлеченный урок: Я нахожусь в той точке, где решить проблему с scanf на этом этапе, вероятно, будет проще. Однако, если это не так, использование fgets, strtok и atoi выполнит большую часть работы, но мне все равно нужно идентифицировать два пробела подряд.

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

while ( scanf ( "%d", &x ) == 1 )

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

И как только я получу пробел, я не знаю как сказать:

if ((input == "whitespace") && (previousInput == "whitespace"))
  ya da ya da
else (input == "whitespace")
  ya da ya da
else 
  ya da ya da

Я ценю ваше время и благодарю вас за вашу помощь.

Извлеченный урок:

while ( scanf ( "%d", &x ) == 1 )

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

И как только я получаю пробел, я этого не делаю. Не знаю, как сказать:

if ((input == "whitespace") && (previousInput == "whitespace"))
  ya da ya da
else (input == "whitespace")
  ya da ya da
else 
  ya da ya da

Я ценю ваше время и благодарю вас за вашу помощь.

Извлеченный урок:

while ( scanf ( "%d", &x ) == 1 )

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

И как только я получаю пробел, я этого не делаю. Не знаю, как сказать:

if ((input == "whitespace") && (previousInput == "whitespace"))
  ya da ya da
else (input == "whitespace")
  ya da ya da
else 
  ya da ya da

Я ценю ваше время и благодарю вас за вашу помощь.

Извлеченный урок: В то время как решение для scanf опубликовано ниже Джонатаном Леффлером, решение было немного более простым с getc (поскольку требовалось менее глубокое знание внутреннего scanf, регулярных выражений и char). Оглядываясь назад, можно сказать, что лучшее знание регулярных выражений, scanf и char сделало бы проблему проще и, конечно, зная, какие функции доступны и какую из них лучше всего использовать с самого начала.

9
задан Community 23 May 2017 в 01:45
поделиться