Ниже приведен код с использованием 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; }
Это хорошо объяснено в C FAQ . См. Также: пояснение . Предлагаемые решения:
fgets
и sscanf
while((c = getchar()) != '\n' && c != EOF)
/* discard the character */;
Тот факт, что flushing stdin работает с некоторыми реализациями , неверен .
Некоторые производители реализуют fflush, так что fflush (stdin) отбрасывает непрочитанные символы, хотя переносные программы не могут зависеть от этого.
blockquote>
Для C на GNU
вы можете использовать
__fpurge(stdin);
включить заголовок stdio_ext.h для доступа к функции. Хотя пост очень старый, я думал, что это может помочь некоторым разработчикам Linux.
scanf(" %c",&c);
или
scanf(" ");
//reading operation (gets(), fgets(stdin,...) etc)
Пробелы в строке формата scanf () будут игнорировать любые пробелы до первого не-пробела.