промывка буфера в c [duplicate]

Ниже приведен код с использованием lambdas

  #include "stdafx.h" #include & lt; vector & gt;  #include & lt; algorithm & gt;  использование пространства имен std;  struct MyStruct {int key;  std :: string stringValue;  MyStruct (int k, const std :: string & amp; s): key (k), stringValue (s) {}};  int main () {std :: vector & lt;  MyStruct & gt;  VEC;  vec.push_back (MyStruct (4, "test"));  vec.push_back (MyStruct (3, "a"));  vec.push_back (MyStruct (2, "is"));  vec.push_back (MyStruct (1, «this»));  std :: sort (vec.begin (), vec.end (), [] (const MyStruct & amp; struct1, const MyStruct & amp; struct2) {return (struct1.key & lt; struct2.key);});  return 0;  }  

4
задан Lightness Races in Orbit 8 June 2011 в 11:34
поделиться

3 ответа

Это хорошо объяснено в C FAQ . См. Также: пояснение . Предлагаемые решения:

  • Выйти с помощью scanf. Используйте fgets и sscanf
  • Используйте это, чтобы съесть новую строку
    while((c = getchar()) != '\n' && c != EOF)
    /* discard the character */;
    

Тот факт, что flushing stdin работает с некоторыми реализациями , неверен .

Некоторые производители реализуют fflush, так что fflush (stdin) отбрасывает непрочитанные символы, хотя переносные программы не могут зависеть от этого.

15
ответ дан cnicutar 16 August 2018 в 10:59
поделиться

Для C на GNU

вы можете использовать

__fpurge(stdin);

включить заголовок stdio_ext.h для доступа к функции. Хотя пост очень старый, я думал, что это может помочь некоторым разработчикам Linux.

3
ответ дан Genocide_Hoax 16 August 2018 в 10:59
поделиться
  • 1
    Это ужасно, даже если он работает по назначению. Представьте, что произойдет, если вход поступает из файла или трубы. – Rafael Lerm 18 January 2015 в 00:51
scanf(" %c",&c);

или

scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)

Пробелы в строке формата scanf () будут игнорировать любые пробелы до первого не-пробела.

2
ответ дан humodz 16 August 2018 в 10:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: