2017-02-21 5 views
0

C言語で単純なプログラムを試してみたところ、配列に挿入していました。 文字を受け入れるのにscanf関数を使用しましたが、コンパイラはそれをスキップしてプログラムの最後に行ったようです。 これは私が使用するコードであった: -文字でスキャン機能が動作しない

#include <stdio.h> 

void main() 
{ 
    int a[50], i, j, m, n, x; 
    char ch; 
    printf("Enter the no. elements of the array :- "); 
    scanf("%d", &m); 
    printf("Enter the elements below :- "); 
    for (i = 0; i < m; i++) 
    { 
     scanf("%d", &a[i]); 
    } 
    printf("The array is :- \n"); 
    for (i = 0; i < m; i++) 
    { 
     printf("%d", a[i]); 
    } 
    printf("\nDo you want to enter an element ? (Y/N)\n"); 
    scanf("%c", &ch);  // The compiler just skips this along with the  
    while (ch == 'y' || ch == 'Y') // while loop and goes straight to the printf 
    {     // statement 
     printf("The index of the element :- "); 
     scanf("%d", &n); 
     printf("\nEnter a number :- "); 
     scanf("%d", &x); 
     for (i = m; i > n; i--) 
     { 
      a[i] = a[i - 1]; 
     } 
     a[n] = x; 
     printf("\nInsert more numbers ? (Y/N)"); 
     scanf("%c", &ch); 
     m = m + 1; 
    } 
    printf("\nThe array is :- "); 
    for (i = 0; i < m; i++) 
    { 
     printf("%d", a[i]); 
    } 
} 

をI、すなわちY又はN要素を挿入するか否かを、ユーザが選択を有することを可能にするために可変chを用います。

しかし、コンパイラは基本的にcharを受け入れる第3のscanf関数と、whileループをスキップします。

scanf機能がスキップされた理由を知りたいだけですか?

+2

scanf( "%c"、&ch); ')に' scanf( "%c"、&ch); 'を'〜に変更してバッファに残った改行を消費してください。他の形式とは異なり、 '%c'は自動的に入力バッファ内の空白をスキップしません。 –

+3

[Scanfスキップスキャン文字]の複製があります(http://stackoverflow.com/questions/36281871/scanf-skip-scanning-character) – EOF

+0

....よくインデントされたコードを投稿してください... – LPs

答えて

5

前のページに戻るscanfこれは最後の配列メンバーです。入力ファイルで

scanf("%d",&a[i]) 

あなたが入力した場合:

32\n 
^^ 

入力10進数を読んだ後だけ改行の前に待機します。問題の原因scanf

:それは暗黙的に実行された後、その行をスキップします理由です入力で利用可能あるよう

scanf("%c", &ch); 

これは、改行文字を読み込みます。

空白を無視するには、@ xingと@WeatherVaneのコメントに記載されているように、指定子%cの前にスペースを追加するだけです。

scanf(" %c",&ch); 

C99 7.19.6.2

入力空白文字(isspace関数によって指定される) 仕様は、[を含むない限りをスキップしますc、またはn 指定子.250)

+1

丁寧な回答+1。しかし、以前の答えのトンを重複として使用することを検討してください – LPs

+0

この質問も重複していますが、OP –

+0

からの 'scanf'の理解がないようです。"入力で利用できるので改行文字を読み込みますそれは白い空白を無視するために "私はそれをあまり得ていませんでした。 scanf関数の前に\ nがあるので、scanf関数がなぜスキップするのかについて詳しく述べてください。 – steve

関連する問題