1

配列に16文字ずつ入力したいのですが...

#include<stdio.h>
void main(){
 int i,j;
 char a[4][4];
printf("Enter Values in array : ");
for ( i=0 ; i<=3 ; i++ )
{
for ( j=0 ; j<=3 ; j++ )
{
    printf("a[%d][%d] : ",i,j);
    scanf("%c",&a[i][j]);
}}
for ( i=0 ; i<=3 ; i++ )
{
for ( j=0 ; j<=3 ; j++ )
{
    printf("a[%d][%d] : %c\n",i,j,a[i][j]);
}}}

そして出力は

a[0][0] : q
a[0][1] : a[0][2] : w
a[0][3] : a[1][0] : e
a[1][1] : a[1][2] : r
a[1][3] : a[2][0] : t
a[2][1] : a[2][2] : y
a[2][3] : a[3][0] : u
a[3][1] : a[3][2] : i
a[3][3] :

なぜa[0][1]、a[0][3]などを入力できないのですか....なぜスキップされるのですか...また、これを機能させるためのより良い方法を教えてください...

4

3 に答える 3

6

scanf() は、後続の呼び出しで消費される入力バッファーに改行文字を残します。

空白をスキップするように scanf() に指示します。

scanf(" %c",&a[i][j]); // Notice the space in the format string

フォーマット指定子のスペースにより、scanf() は文字を読み取る前に空白文字を無視します (の場合%c) 。

于 2013-04-13T09:02:11.687 に答える
2

KingsIndian による回答で問題が説明されています。

解決策として、getchar() または getwchar() を使用します (man 3 getchar を参照)。キャラクター広告を 1 回読むと、次のことができます。

  1. 読み取った文字が期待するタイプに属しているかどうかを確認します (ctype.h または wctype.h を参照)。

  2. 空白、CR、LF、タブなどの不要なものを破棄します。

于 2013-04-13T09:13:13.753 に答える