最初に文字列値を読み、その後にint値を読み取ると機能します。 gets
は同じ行の複数の単語を読むことができるので、scanf
の代わりに関数gets
を使用しようとしました。"gets"関数を使用して読み取られた文字列を印刷できません
fgets
でも試しましたが、同じ問題があります。
私はCygwinの32ビットコンパイラバージョン2.874を使用しています。私はcodeblocks ide 13.12を使用しています。
scanf(" %s", s); // here the space will emit the previous newline or space
以上のバッファのサイズへの入力を制限するであろうfgets
を使用する:あなたが入力した整数は、scanf
でこれをしようとすると、
#include <stdio.h>
#include <stdlib.h>
int main() {
int i;
char s[10];
printf("Value int:\n");
scanf("%d",&i);
printf("%d\n",i);
printf("Value string:");
fflush(stdin);
gets(s);
printf("%s\n",s);
getchar();
return 0;
}
getを使用しないでください。代わりにfgets ==> fgets(s、10、stdin)を使用してください。またはscanf ==> scanf( "%9s"、s); – Michi
http://stackoverflow.com/questions/5240789/scanf-leaves-the-new-line-char-in-bufferおよびhttp://stackoverflow.com/questions/3555108/multiple-word-string-input- – NPE
'gets'は標準的ではありません(それ以上)、すべてのツールチェーンはあなたにそれを使って叫ぶべきです。 **決して**これを使用しないでください! 'fflush(stdin)'は未定義の動作を呼び出します。また、それを使用しないでください! – Olaf