C program does not read values in txt file

Asked

Viewed 72 times

0

Guys, I’m back again. I applied some changes that the members here suggested in another post, but the values are still not read correctly. Now gives up to integer values (before DOS printed negative values with more than 5 digits). Follows part of the code:

void (CPU)
{
setlocale(LC_ALL, "Portuguese");
int matriiz_A[5][5];
char matriz_A[5][5];
int matriz_B[3][2];
int matriz_C[3][2];
int m, n, k, l, i, j, x, aux;

printf("\n Abaixo temos a matriz A \n");

FILE *matrizA;
matrizA = fopen("matriz_A.txt", "r");

if (matrizA == NULL)
{
    printf("\nNão foi possivel abrir o arquivo. \n");
    exit(0);
}

while (fgets(matriz_A, 25, matrizA) != NULL);
{
    for (m = 0; m<5; m++)
    {
        for (n = 0; n<5; n++)
        {
            fscanf(matrizA," %d%*c ", &matriz_A[m][n]);
            printf(" %d ", matriz_A[m][n]);
        }
        printf("\n");
    }
}
fclose(matrizA);
system("pause");
}


int main(int argc, char const *argv[])
{
setlocale(LC_ALL, "Portuguese");
char escolha = '0';

printf("\nEm que modo você deseja executar o programa? \n");
printf("(1) CPU \n");
printf("(2) GPU \n");
printf("Qualquer outra tecla fecha o programa \n");
escolha = getche();

if (escolha == '1')
{
    CPU();
}
else if (escolha == '2')
{

}
else if ((escolha != '1') && (escolha != '2'))
{
    printf("\nEscolha inválida. Programa será encerrado\n");
    exit(1);
}

//system("pause");
return 0;
}

Below is the file . txt that I want to read:

01 00 02 03 04
00 05 06 00 07
08 09 00 11 12
13 00 14 15 00
00 00 16 17 18

The result I got was this:

inserir a descrição da imagem aqui

using aux I also got the same result. Would it be a problem with the getche() function? This because I realized that in Linux it made garbage come out in the matrix, already in windows no. I researched in depth on the net and have not solved yet. :(

  • If the solution people presented to you in your other post didn’t solve your problem, you should have exposed it to them in the response comments.

2 answers

1


As the program posted is confused, it is easier to rewrite than point out the errors.

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

static void CPU(void)
{
  int m, n, nLido;

  char matriz_A[5][5];

  FILE* matrizA;

  printf("* abrindo arquivo matriz_A.txt\n");

  matrizA = fopen("matriz_A.txt", "r");
  if (matrizA == NULL)
  {
    printf("* nao foi possivel abrir arquivo matriz_A.txt\n");
    exit(1);
  }

  for (m = 0; m < 5; m++)
  {
    for (n = 0; n < 5; n++)
    {
      nLido = fscanf(matrizA,"%d", &matriz_A[m][n]);
      if (nLido != 1)
      {
        printf(" erro na leitura de matriz_A[%d][%d]\n", m, n);
        exit(2);
      }
      printf("%02d ", matriz_A[m][n]);
    }
    printf("\n");
  }

  fclose(matrizA);
}

int main(void)
{
  char escolha = '0';

  printf("*\n");
  printf("* em que modo você deseja executar o programa?\n");
  printf("* (1) CPU \n");
  printf("* (2) GPU \n");
  printf("* qualquer outra tecla fecha o programa\n");
  scanf(" %c%*[^\n]", &escolha);

  if (escolha == '1')
  {
    CPU();
  }
  else if (escolha == '2')
  {

  }
  else
  {
    printf("* escolha invalida, programa encerrado\n");
    exit(3);
  }

}

// 01 00 02 03 04
// 00 05 06 00 07
// 08 09 00 11 12
// 13 00 14 15 00
// 00 00 16 17 18

Testing:

[~/Projects/testes/so]
$cc -o 387091 387091.c 

[~/Projects/testes/so]
$./387091
*
* em que modo você deseja executar o programa?
* (1) CPU 
* (2) GPU 
* qualquer outra tecla fecha o programa
1
* abrindo arquivo matriz_A.txt
01 00 02 03 04 
00 05 06 00 07 
08 09 00 11 12 
13 00 14 15 00 
00 00 16 17 18 

[~/Projects/testes/so]
$
  • thanks, bro. Solved. Besides serving me, I can study the code and improve myself in the language

0

Do:

void (CPU)
{
    setlocale(LC_ALL, "Portuguese");
    int matriz_A[5][5];
    int matriz_B[3][2];
    int matriz_C[3][2];
    char linha[300];
    int m, n, k, l, i, j, x, aux;

    printf("\n Abaixo temos a matriz A \n");

    FILE *matrizA;
    matrizA = fopen("matriz_A.txt", "r");

    if (matrizA == NULL)
    {
         printf("\nNão foi possivel abrir o arquivo. \n");
         exit(0);
    }
    m =0;
    while (fgets(linha, 300, matrizA) != NULL);
    {
        for (n = 0; n<5; n++)
        {
            sscanf(linha," %d%*c ", &matriz_A[m][n]);
            printf(" %d ", matriz_A[m][n]);
        }
        printf("\n");
        m++;
    }
    fclose(matrizA);
    system("pause");
}

or

void (CPU)
{
    setlocale(LC_ALL, "Portuguese");
    int matriz_A[5][5];
    int matriz_B[3][2];
    int matriz_C[3][2];
    int m, n, k, l, i, j, x, aux;

    printf("\n Abaixo temos a matriz A \n");

    FILE *matrizA;
    matrizA = fopen("matriz_A.txt", "r");

    if (matrizA == NULL)
    {
         printf("\nNão foi possivel abrir o arquivo. \n");
         exit(0);
    }

    for (m = 0; m<5; m++)
    {
        for (n = 0; n<5; n++)
        {
            fscanf(matrizA," %d%*c ", &matriz_A[m][n]);
            printf(" %d ", matriz_A[m][n]);
        }
        printf("\n");
    }
    fclose(matrizA);
    system("pause");
}

How he had been guided in his other question.

  • it is not necessary to put "%d%*c ", only "%d" is sufficient, because the format "%d" jumps "whitespaces", that is, spaces, 'n', 'r' and ' t'

Browser other questions tagged

You are not signed in. Login or sign up in order to post.