2016-08-12 13 views
0

コマンドプロンプトを入力するための簡単なメモ帳のようなプログラムを作成しようとしています。しかし、scanf()関数を使って "Enter"を押すと、次の行に正確に到達することはできません。 scanfのよりscanfを使って改行記号を取得する方法は?

#include<stdio.h> 
void main() 
{ 
char c; 
for(;;){ 
     scanf("%c", &c); 
    if(c == "\n"){ 
     printf("\n"); 
     } 
    else{ 
     printf("%c", c); 
     } 
} 
} 

(私は(scanfのを知っている)私は問題を取り除くために最善を試してみました。バッファに新しい文字を残します。使用済みgetchは()関数の後に()が、私はそれを動作させることができません私はscanf()関数でこの問題を理解しなければならないので、文字列などを使用するような選択肢を避けたい)

+4

'「\ n」は'の文字列(1つの文字を含む)され、 ' '\ n''あなたはあなたのコンパイラdin'tはあなたに警告、またはあなたがそれを無視することを選んだと言うことを意味 – immibis

+3

文字ですか?私に何かを教えて、それで、質問を書いて、それを掲示して、_answers_を待って、本当にそれほど楽しいですか? –

+0

あなたは 'scanf'が何をしているのか誤解しているようです。それは、バッファ内に抽出された文字を残すことはありません。それの目的は何でしょうか? –

答えて

4

まあ、あなたはちょっと不幸です。これは、Cプログラミングが始まったときの人気の問題です。 Cには、'\n'"n"の間には大きな違いがあります。最初の文字は1文字なので、'\n'のタイプはcharです。もう1つは文字列で、Cの文字列はchar[]です。文字列として実際に"\n" = ['\n', '\0']'\0'で終わり、Cに終わることを意味します。

また、scanfは、先頭の白い記号を無視し、新しい行は白い記号です。より多くの文字を入手したい場合は、代わりにfgetsを使用してください。一文字読みには、scanfはまだOKです。

これは、スタックオーバーフローのトピックthisで広く説明されています。

#include<stdio.h> 
void main() { 
    char c; 
    for(;;){ 
     scanf("%c", &c); 
     if(c == '\n'){ 
      printf("\n"); 
     } else{ 
      printf("%c", c); 
     } 
    } 
} 
+2

''%c "'形式の場合、 'scanf'は空白をスキップしません。 –

+0

@JoachimPileborgが編集されました。 – xenteros

+0

うーん、それはまだ私のPCで動作していません。あなたはチェックしましたか? –

関連する問題