[C] Problem bei Dateiverarbeitung

ul7ima

Grünschnabel
Hallo habe eine Aufgabe, wo ne Matrix aus ner Datei ausgelesen und Verändert werden soll. Die Zahlen sind alle Untereinander und die ersten beiden geben die Dimension der Matrix an.
Das Problem ist jetzt bei mir an der Stelle wo ich Abfrage ob die Zahl geändert werden soll.
Da ließt er nur mist ein. Auch danach wenn man die Zahl eingeben soll. Den double wert ließt er auch völlig falsch ein. Warum?

Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(char argc, char *argv[]) {
  char eingabe[20];
  int zeingabe;
  char name;
  char puffer[500];
  double neuezahl; 
  int spalten, spaltenb;
  int zeilen, zeilenb;
  int zaehler = 1;
  int weiter = 0, ende = 0;
  int zahl;
  int i=1;
  int k, elementenzahl, position;

  
  FILE *fp;
  
  if (argv[1] == NULL) {
	printf("Gib einen Dateinamen an \n");
	scanf("%s", eingabe);
    	}
	
	else {
	strcpy(eingabe, argv[1]);
	}
  
  while (ende != 1){
  
  if ((fp = fopen (eingabe,"r+")) == NULL){  
          printf("Fehler beim Öffnen der Datei\n"); 
          exit(1);
          }
  
  fgets(puffer, sizeof(puffer), fp);
  printf("Anzahl der Zeilen ist: %s",puffer);
  zeilen = atoi(puffer);
  
  fgets(puffer, sizeof(puffer), fp);
  printf("Anzahl der Spalten ist: %s",puffer);
  spalten = atoi(puffer);

  k = spalten*zeilen+2;
  elementenzahl = k;
  
  char speicher[k];
  speicher[1]=zeilen;
  speicher[2]=spalten;
  elementenzahl -= 2;
  position = 3;
  
  while (weiter != 1){
  printf("Geben Sie bitte die Zeile an:\n");
  	scanf("%i", &zeingabe);

  	if(zeingabe <1 || zeingabe > zeilen){
               printf("Geben Sie bitte Zahl im gültigen Bereich an!\n");
               }
       else{
         zeilenb = zeingabe;
         weiter = 1;
         }  
                  }
                  
                  
   weiter = 0;
            
    while (weiter != 1){
          printf("Geben Sie bitte die Spanlte an:\n");
  	      scanf("%d", &zeingabe);
  	
                      if(zeingabe <1 || zeingabe > spalten){
                      printf("Geben Sie bitte Zahl im gültigen Bereich an!\n");
                      }
                      
                      else{
                      spaltenb = zeingabe;
                      weiter = 1;
                      }  
   }	    
                         
  weiter = 0;
  	           
  zahl = (zeilenb-1)*spalten+(spaltenb-1)+2; 
  
  while(i != zahl-1){
      
        fgets(puffer, sizeof(puffer), fp);
        double inhalt = atof(puffer);
        speicher[position] = inhalt;
        i++;
        elementenzahl--;
        position++;
        }
        
        fgets(puffer, sizeof(puffer), fp);
        double inhalt = atof(puffer);
        char c;
        printf("Ausgewaehltes Element: %f \n", inhalt);
        
        printf("Soll die Zahl geaendert werden? j/n \n");
            scanf("%c", &c); //ebenfalls probiert mit scanf("%1s", &c) und gets(c);
            if (c == 'n'){
              fclose(fp);
              ende = 1;
              }
              
             else{
                             
              printf("Hoe hab doch gar nix gemacht\n");                      
              printf("Geben sie eine neue Zahl ein:\n");
 	          scanf("%f", &neuezahl);
              printf("Die neue Zahl ist: %f\n",neuezahl);  
 	          speicher[position] = neuezahl;
 	          
              elementenzahl--;
              position++;

              }
              
              while(elementenzahl > 0){
                   fgets(puffer, sizeof(puffer), fp);
                   double inhalt = atof(puffer);
                   speicher[position] = inhalt;
                   printf("Bis zu ende Kopieren: %s",speicher[position]);
                   position++; 
                   elementenzahl--;
                      }      

              
          if ((fp = fopen (eingabe,"w")) == NULL){ 
             printf("Fehler beim Speichern der Daten\n"); 
             exit(1);
          }
          elementenzahl = 1;
          
          while (position > 0){
                neuezahl = speicher[elementenzahl];
                fprintf(fp ,"%f",neuezahl);
                elementenzahl++;
                position--;
                }
                
          
        printf("Soll noch eine Zahl geändert werden? j/n\n");   
            scanf("%c", &c);
            
           if ('n' == c) {
              close(fp);
              ende = 1;
              }
}

return 0;
  
}
 
Zuletzt bearbeitet:
Möglicherweise musst du bei der Eingabe für die Zahl einen Punkt als Trennzeichen für die Nachkommastellen verwenden statt eines Kommas.
Für das Einlesen der J/N-Taste würde ich getc(stdin) verwenden.
Wenn das nicht hilft, solltest du versuchen, deine Probleme präziser zu formulieren.
 
Nicht dass ich gerade gebrauchen könnte was du gemacht hast,
aber trotzdem ist es sinnvoll, die Lösung seines Problems hier zu posten,
damit andere sie bei Bedarf ebenfalls nachschlagen können!
So sparst du Suchenden viel Zeit und Nerven...:-(
 
Zurück