Weird loop while reading from a file in C










0















I'm writing a code in C to read matrixes (square matrix with 3 <= dim <= 9) from a .txt file and print it exactly how it is written. The file is arranged as follows:



5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX


The first number indicates the size of the subsequent matrix.



I wrote the following code:



int main () 
FILE *arquivo;
char A[9][9];
int N;
int i,j;
char temp;
arquivo = fopen("matrizes.txt", "r");
if (!arquivo) printf("Erro.n");
while (fscanf(arquivo, "%d", &N) != EOF)
printf("%d n", N);
fgetc(arquivo);
for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++)
for (j = 0; j < N; j++)
A[i][j] = temp;


for (i = 0; i < N; i++)
for(j = 0; j<N; j++)
printf("%c", A[i][j]);

puts(" ");


return 0;



The output is this



5 
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
6
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX
XXXXXX


I honestly have no idea why this is happening. I tried different conditions to stop the loop, bot none of them worked out.



If I change




while (fscanf(arquivo, "%d", &N) != EOF)




into




while (fscanf(arquivo, "%d", &N) == 1)




the output is just



5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA


The value of the second loop scanf in this case is "0".
How can I fix it and print exactly what is written on the file?



By the way, I know there are other forms to print a .txt exactly how it is made, I mean, I don't need 2D arrays to do this. However, I will use this program to read several matrixes and do some tests with them (also I want to print them as well), so I really need to store the data in a matrix of characters.










share|improve this question


























    0















    I'm writing a code in C to read matrixes (square matrix with 3 <= dim <= 9) from a .txt file and print it exactly how it is written. The file is arranged as follows:



    5
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    6
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX


    The first number indicates the size of the subsequent matrix.



    I wrote the following code:



    int main () 
    FILE *arquivo;
    char A[9][9];
    int N;
    int i,j;
    char temp;
    arquivo = fopen("matrizes.txt", "r");
    if (!arquivo) printf("Erro.n");
    while (fscanf(arquivo, "%d", &N) != EOF)
    printf("%d n", N);
    fgetc(arquivo);
    for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++)
    for (j = 0; j < N; j++)
    A[i][j] = temp;


    for (i = 0; i < N; i++)
    for(j = 0; j<N; j++)
    printf("%c", A[i][j]);

    puts(" ");


    return 0;



    The output is this



    5 
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    5
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    5
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    5
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    5
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    6
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    6
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    6
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    6
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    6
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    6
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX
    XXXXXX


    I honestly have no idea why this is happening. I tried different conditions to stop the loop, bot none of them worked out.



    If I change




    while (fscanf(arquivo, "%d", &N) != EOF)




    into




    while (fscanf(arquivo, "%d", &N) == 1)




    the output is just



    5
    AAAAA
    AAAAA
    AAAAA
    AAAAA
    AAAAA


    The value of the second loop scanf in this case is "0".
    How can I fix it and print exactly what is written on the file?



    By the way, I know there are other forms to print a .txt exactly how it is made, I mean, I don't need 2D arrays to do this. However, I will use this program to read several matrixes and do some tests with them (also I want to print them as well), so I really need to store the data in a matrix of characters.










    share|improve this question
























      0












      0








      0


      1






      I'm writing a code in C to read matrixes (square matrix with 3 <= dim <= 9) from a .txt file and print it exactly how it is written. The file is arranged as follows:



      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX


      The first number indicates the size of the subsequent matrix.



      I wrote the following code:



      int main () 
      FILE *arquivo;
      char A[9][9];
      int N;
      int i,j;
      char temp;
      arquivo = fopen("matrizes.txt", "r");
      if (!arquivo) printf("Erro.n");
      while (fscanf(arquivo, "%d", &N) != EOF)
      printf("%d n", N);
      fgetc(arquivo);
      for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++)
      for (j = 0; j < N; j++)
      A[i][j] = temp;


      for (i = 0; i < N; i++)
      for(j = 0; j<N; j++)
      printf("%c", A[i][j]);

      puts(" ");


      return 0;



      The output is this



      5 
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX


      I honestly have no idea why this is happening. I tried different conditions to stop the loop, bot none of them worked out.



      If I change




      while (fscanf(arquivo, "%d", &N) != EOF)




      into




      while (fscanf(arquivo, "%d", &N) == 1)




      the output is just



      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA


      The value of the second loop scanf in this case is "0".
      How can I fix it and print exactly what is written on the file?



      By the way, I know there are other forms to print a .txt exactly how it is made, I mean, I don't need 2D arrays to do this. However, I will use this program to read several matrixes and do some tests with them (also I want to print them as well), so I really need to store the data in a matrix of characters.










      share|improve this question














      I'm writing a code in C to read matrixes (square matrix with 3 <= dim <= 9) from a .txt file and print it exactly how it is written. The file is arranged as follows:



      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX


      The first number indicates the size of the subsequent matrix.



      I wrote the following code:



      int main () 
      FILE *arquivo;
      char A[9][9];
      int N;
      int i,j;
      char temp;
      arquivo = fopen("matrizes.txt", "r");
      if (!arquivo) printf("Erro.n");
      while (fscanf(arquivo, "%d", &N) != EOF)
      printf("%d n", N);
      fgetc(arquivo);
      for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++)
      for (j = 0; j < N; j++)
      A[i][j] = temp;


      for (i = 0; i < N; i++)
      for(j = 0; j<N; j++)
      printf("%c", A[i][j]);

      puts(" ");


      return 0;



      The output is this



      5 
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      6
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX
      XXXXXX


      I honestly have no idea why this is happening. I tried different conditions to stop the loop, bot none of them worked out.



      If I change




      while (fscanf(arquivo, "%d", &N) != EOF)




      into




      while (fscanf(arquivo, "%d", &N) == 1)




      the output is just



      5
      AAAAA
      AAAAA
      AAAAA
      AAAAA
      AAAAA


      The value of the second loop scanf in this case is "0".
      How can I fix it and print exactly what is written on the file?



      By the way, I know there are other forms to print a .txt exactly how it is made, I mean, I don't need 2D arrays to do this. However, I will use this program to read several matrixes and do some tests with them (also I want to print them as well), so I really need to store the data in a matrix of characters.







      c loops fgetc






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 14 '18 at 2:58









      LucasLucas

      1031




      1031






















          1 Answer
          1






          active

          oldest

          votes


















          2














          The problem is here.



           for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++) 
          for (j = 0; j < N; j++)
          A[i][j] = temp;




          The loop will exit once it sees a newline and start the while loop again.



          Instead you want to read N lines.



           for (i = 0; i < N; i++) 
          for(j = 0; (temp = fgetc(arquivo)) != 'n'; j++ )
          A[i][j] = temp;







          share|improve this answer






















            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292547%2fweird-loop-while-reading-from-a-file-in-c%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            The problem is here.



             for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++) 
            for (j = 0; j < N; j++)
            A[i][j] = temp;




            The loop will exit once it sees a newline and start the while loop again.



            Instead you want to read N lines.



             for (i = 0; i < N; i++) 
            for(j = 0; (temp = fgetc(arquivo)) != 'n'; j++ )
            A[i][j] = temp;







            share|improve this answer



























              2














              The problem is here.



               for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++) 
              for (j = 0; j < N; j++)
              A[i][j] = temp;




              The loop will exit once it sees a newline and start the while loop again.



              Instead you want to read N lines.



               for (i = 0; i < N; i++) 
              for(j = 0; (temp = fgetc(arquivo)) != 'n'; j++ )
              A[i][j] = temp;







              share|improve this answer

























                2












                2








                2







                The problem is here.



                 for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++) 
                for (j = 0; j < N; j++)
                A[i][j] = temp;




                The loop will exit once it sees a newline and start the while loop again.



                Instead you want to read N lines.



                 for (i = 0; i < N; i++) 
                for(j = 0; (temp = fgetc(arquivo)) != 'n'; j++ )
                A[i][j] = temp;







                share|improve this answer













                The problem is here.



                 for (i = 0; ((i < N) && (temp = fgetc(arquivo)) != 'n') ; i++) 
                for (j = 0; j < N; j++)
                A[i][j] = temp;




                The loop will exit once it sees a newline and start the while loop again.



                Instead you want to read N lines.



                 for (i = 0; i < N; i++) 
                for(j = 0; (temp = fgetc(arquivo)) != 'n'; j++ )
                A[i][j] = temp;








                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 14 '18 at 3:09









                SchwernSchwern

                90.3k17102233




                90.3k17102233





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53292547%2fweird-loop-while-reading-from-a-file-in-c%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Use pre created SQLite database for Android project in kotlin

                    Darth Vader #20

                    Ondo