printf系の書式(フォーマット)文字列でエスケープしなきゃなんないのはどれかわかってなくてハマりました。
正解のコード
char buffer[80]; char format[20]; // 20もあれば用は足りるので…… printf("なんかいれてね : "); //sprintf(format, "%%%d[^\\n]%%*[^\\n]", 80 - 1); // これは間違い sprintf(format, "%%%d[^\n]%%*[^\n]", 80 - 1); // 文字数と空白文字を考慮 scanf(format, buffer); getchar(); // 入力ストリームを空にする puts(buffer);
即値使っているのは気にしないで下さい……。
sprintf(format, "%%%d[^\\n]%%*[^\\n]", 80 - 1);
と書いていてあれれーってなっていました。
\
マークが出ると無条件にエスケープしたくなりますが、
printf系の場合はエスケープしちゃダメなのね……。
正しくは
sprintf(format, "%%%d[^\n]%%*[^\n]", 80 - 1);
ちなみに素直にsprintfを使わずに指定する場合は
scanf("%79[^\n]%*[^\n]", buffer);
でOKです。
エスケープすべきは%
のみです。
参考
scanf - Wikipedia
…なんというscanfマニアックな記事w
あんまり使わないですよね……。
ふーん正規表現チックなことができるんだと感心。