Wczytanie zmienych z pliku w linux

0

Witam, mam program do którego potrzebuje wpisać cyfry do tablicy dwuwymiarowej o wymiarach 10x10. Tych cyfr jest dużo to pomyślałem sobie ze zrobię pliczek textowy i przekieruje go w trakcie komplikowania tym sposobem:
gcc program.c ; ./a.out < plik.txt
mój plik txt wygląda tak

10
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0

Oto caly kod:

#include<stdio.h>
     
  int  main() {
      int  n,i,j,x,y;
      printf("Dlugosc ciagu:\n"); scanf("%i", &n);
      int  tab[n][n];
      
for (j=0; j<n; j=j+1){ //wczytanie mapy
for (i=0; i<n; i=i+1){
 scanf("%d", &tab[j][i]);
      }}
      
void show(){  // pokazuje mape   
for (j=0; j<n; j=j+1){
 for (i=0; i<n; i=i+1)printf("%d",tab[j][i]);     
  printf("\n");
}}

show();
printf("Podaj Start (x,y) :\n"); 
printf("Masz wybór (%d,%d) :\n",n,n);
scanf("%i", &x);scanf("%i", &y);

    
    
return 0;    
  }
 

cały problem polega na tym ze gdy go tak uruchomię to cały program przechodzi tzn nie reaguje w późniejszym kodzie na scanfy.
jak rozwiązać taki problem?

0

Ano nie reaguje, bo po 1: wczytujesz z pliku a nie z klawiatury (tak więc liczby dla ostatnich 2 też tam muszą być, koniec pliku=koniec liczb do wczytania), a po drugie 2 po tych scanf-ach nic już się nie dzieje. Generalnie zainteresuj się obsługą plików, wtedy będziesz mógł wczytać mapkę z pliku a pozycje z klawiatury.

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

int
main() {
	int n, i, j;
	FILE* f;
	if(!(f = fopen("test.txt", "w"))) {
		printf("Nie mozna otworzyc pliku do zapisu!\n");
		exit(-1);
	}
	
	printf("Dlugosc ciagu:\n");
	scanf("%i", &n);
	int tab[n][n];

	for(j = 0; j < n; ++j) {
		for(i = 0; i < n; ++i) {
			scanf("%d", &tab[j][i]);
		}
	}

	for(j = 0; j < n; ++j) {
		for(i = 0; i < n; ++i) {
			fprintf(f, "%d", tab[j][i]);
		}
		fprintf(f, "\n");
	}

        fclose(f);

	return 0;
}
0

Poza tym na etapie kompilacji - nie da się.

0

ok dzięki za rade, jak będę miał chwile to wgłębię się w ten temat, tak rzucając okiem to w odpowiedzi n0name_l powinno być fscanf..... zamiast w fprintf

0

tak zrobiłem kod na szybko może komuś się przyda:

#include <stdlib.h>
#include <stdio.h>
int main() {
       
  int  n,j;
      int i=0;
      FILE *plik;
      if  ((plik=fopen("mapa.txt", "r"))==NULL)
	printf("Nie moge otorzyc pliku!\n");     

        printf("Dlugosc ciagu:\n");
	fscanf(plik, "%d", &n);
       // scanf("%i", &n);
        int tab[n][n];
 
        for(j = 0; j < n; ++j) {
                for(i = 0; i < n; ++i) {
		
		   fscanf(plik, "%d", &tab[j][i]);
                       
                }
        }
 
      for (j=0; j<n; j=j+1){
 for (i=0; i<n; i=i+1)printf("%d",tab[j][i]);     
  printf("\n");
}
 
        return 0;
} 

plik mapa.txt wyglada tak:

10
0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0 0
0 0 1 1 1 1 1 0 0 0
0 0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0
1 1 1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 
0

Po co w temacie posta wpisałeś linux? Jeśli chcesz wykorzystać funkcje języka C, które są dostarczone razem z jądrem systemu, to nie używaj fread, fwrite, tylko read i write. Tak to trochę nie ma sensu

1 użytkowników online, w tym zalogowanych: 0, gości: 1