質問: c言語のscanf関数で\nをよみとる方法は無いでしょうか。 自作のターミナル的なアプリケーションを作成したいと考えているのですが、 通常ターミナルでは、プロンプトの状態でエンターしたらプロンプトが再表示されるのですが、 [例] $ ←ここでエンター $ 再表示される scanfでそれをしようとすると、なにも表示されません。おそらくまだ入力待ちになっています。 scanfの使用上エンターを読み取れないと言っていた人がいたので、代替出来る関数はありませんか? また、scanfで出きるなら方法を教えて下さい。 ーーー|使用環境|ーーー os:linux(debian派生) コンパイラー:gcc c言語は初めて1年ほどになりますが、途中javaにいったりhaskellにいったりしてたので、経験は半年分ぐらいです。 よろしくお願い致します。
回答: 一行分を fgets で取ってから sscanf で解析し、 戻り値で目的の入力値が取れたか確認しましょう。 #define n 256 char buff[n], cmd[n], param[n]; while (1) { _ printf("$ "); _ fgets(buff, n, stdin); // 安全のために最大桁も指定 _ int n = sscanf(buff, "%s %s", cmd, param); _ if (n == 0) 単純エンターの場合(); _ if (n == 1) cmdだけ取れた場合(); _ if (n == 2) break; // 無限ループ抜ける } cmdとparamが取れた処理(cmd, param);