3

I wrote a test program which should take in a 3x3 matrix of characters and output the entered matrix. However, I have to enter 4 lines in order for the program to produce the corresponding matrix. I have looked up problems on the scanf function, but none of the solutions I tried seemed to work...Could you help me out with this?

My code:

#include <stdio.h>
#include <stdlib.h> 

 int main(void) {


     char a[3][3];
     int i,j;

     for(i=0;i<3;++i)
     {
        for(j=0;j<3;++j)
        {
            scanf("%c",&a[i][j]);
        }
        scanf("\n");
     }

     for(i=0;i<3;++i)
     {
        for(j=0;j<3;++j)
        {
            printf("%c",a[i][j]);
        }
        printf("\n");
     }

     system("PAUSE");

     return(0); }

4 Answers4

0

scanf("%c",...) get the whitespaces and the \n. You can solve it in many ways:

If you read like a b c

for(i=0;i<3;++i)
    {
        for(j=0;j<3;++j)
        {
            scanf("%c",&a[i][j]);
            cin.get(); //Get the spaces after each character and the \n at the end of each line
        }
    }

or you can simple use cin (read char/string inputs with scanf is always a problem)

 for(i=0;i<3;++i)
    {
        for(j=0;j<3;++j)
        {
            cin >> a[i][j];
        }
    }

if you are reading like abc, you only have to substitute your scanf("\n") for a cin.get()

João Menighin
  • 3,083
  • 6
  • 38
  • 80
0

@João Menighin's answer surely works. If you want to avoid c++, this would work:

for(i=0;i<3;++i)
{
   for(j=0;j<3;++j)
   {
       scanf(" %c",&a[i][j]);
   }
}

Although it would ignore ALL whitespace: both abc and a b c would be interpreted to be equivalent.

nofrills
  • 101
  • 3
0

try adding a white space in your scanf right after the "

scanf(" %c",&a[i][j]);

I had the same problem in a two-dimension matrix and it worked for me. I have no idea why though!!! I just spent 1 hour in front of my laptop trying different things...

Bohemian
  • 412,405
  • 93
  • 575
  • 722
teo
  • 11
  • 1
0

Have tried your and IT WORKED. Although, I did make a few changes per comments:

#include <stdio.h>  // added, but that shouldn't matter
main()
{
     char a[3][3];
     int i,j;

     for(i=0;i<3;++i)
     {
        for(j=0;j<3;++j)
        {
            scanf("%c",&a[i][j]);
        }
        //scanf("\n"); // not necessary, see below
     }

     for(i=0;i<3;++i)
     {
        for(j=0;j<3;++j)
        {
            printf(" %c",a[i][j]);
        }
        printf("\n");
     }

     return(0);

}

Compiled and ran this code on Eclipse/Microsoft C Compiler and entered series of characters followed by enter.

abcdefghi
 a b c
 d e f
 g h i

The point of confusion might be that scanf pulls the data from a console buffer. Typically, (although you can work around this) that buffer is returned to your program when you press enter. Also, the format specifier of %c also accepts blanks. Thus, I tried a second run with the following input and output.

a b c d e 
 a   b
   c  
 d   e

You can tell the spaces were read and stored as well as the letters.

Hope this helps.

JackCColeman
  • 3,777
  • 1
  • 15
  • 21