Kann folgende fehler nicht lösen.

Dolphon

Erfahrenes Mitglied
Hi,
Mein untenaufgeführtes Skript spuckt leider Fehler aus, welche ich so auch nicht nachvollziehen kann, da dieses Skript einmal funktioniert hat.
Hoffe eienr kann helfen.

Code:
//------------------------------------------------

#include <vcl.h>
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#pragma hdrstop

//------------------------------------------------



struct daten
{
char datensatz[200];
char test[200];
};

daten merker;
FILE *vin, *vout;

void aendern()
{
 fgets(merker.datensatz, 200, vin);

int zaehler=1;
int i=0;
do
 {
  if(merker.datensatz[i] == '    ')//[C++ Warnung] Unit1.cpp(35): W8098 Ungültige mehrstellige Zeichenkonstante
    {
      merker.test[i]=merker.datensatz[i]; 

    }i++;

 }while(zaehler!=0);
}
printf("Datensatz=%c", &merker.test);[C++ Fehler] access.cpp(42): E2356 Redeklaration von 'printf(const char *,...)' mit anderem Typ

void ausgabe()
{
 fprintf(vout, "%s", merker.test);
}

//------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{

  vin = fopen ("test.log", "r");
  vout = fopen ("test1.log", "w");
  aendern();
  fclose(vin);
  fclose(vout);
  getch();
  return 0;
}
//------------------------------------------------
 
Zuletzt bearbeitet:
Hallo!

Wenn du noch schreiben würdest welche Fehlermeldungen so ausgeworfen werden, dann wäre das sehr hilfreich!


Gruß Buba
 
Ich hab's im Quelltext (wie kommst du auf Skript?) kommentiert.
Gruß
MCoder
C++:
//------------------------------------------------

#include <vcl.h>
#include <iostream.h>           // ==> Ohne ".h" 
#include <fstream.h>            // ==> Ohne ".h" 
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#pragma hdrstop

//------------------------------------------------

struct daten
{
char datensatz[200];
char test[200];
}                                   // Hier fehlt das Semikolon!            

daten merker;                       //[C++ Fehler] Unit1.cpp(24): E2141 Fehler in der Deklarationssyntax
                                    // ==> fehlendes Semikolon, siehe oben
FILE *vin, *vout;

void aendern()
{
 fgets(merker.datensatz, 200, vin); //[C++ Fehler] Unit1.cpp(29): E2451 Undefiniertes Symbol 'merker'
                                    // ==> Folgefehler (Semikolon)

int zaehler=1;
int i=0;
do
 {
  if(merker.datensatz[i] == '    ') //[C++ Warnung] Unit1.cpp(35): W8098 Ungültige mehrstellige Zeichenkonstante
                                    // ==> Nur ein einziges (Leer)Zeichen zwischen einfachen Anführungsstrichen
    {
      merker.test[i]=merker.datensatz[i]; 

    }i++;

 }while(zaehler!=0);
}
printf("Datensatz=%c", &merker.test);//[C++ Fehler] Unit1.cpp(43): E2303 Typname erwartet
                                     // ==> Folgefehler (Semikolon)

void ausgabe()
{
 fprintf(vout, "%s", merker.test);  //[C++ Fehler] Unit1.cpp(43): E2303 Typname erwartet
                                    // ==> Folgefehler (Semikolon)
}

//------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{

  vin = fopen ("test.log", "r");
  vout = fopen ("test1.log", "w");
  aendern();
  fclose(vin);
  fclose(vout);
  getch();
  return 0;
}
//------------------------------------------------
 
Code:
if(merker.datensatz[i] == '    ')
<- Die Trennzeichen zwischen den einzelnen Datensätzen sind aber 4 Leerzeichen. Wie bekomme ich dies nun hin
 
Das kannst du über einen String-Vergleich machen:
C++:
if( (i+4) < sizeof(merker.datensatz) &&              // es müssen noch mindestens 4 Zeichen kommen
    strncmp(&merker.datensatz[i], "    ", 4) == 0 )  // String-Vergleich
{
    // ...
}

Außerdem ist mir aufgefallen, dass du aus der do-Schleife nie wieder herauskommst: Du setzt vor der Schleife "zaehler" auf 1 und prüfst am Ende auf "zaehler != 0", ohne diese Variable in der Schleife zu ändern oder ein "break" einzubauen.

Gruß
MCoder
 
Schonmal Danke für die Antwort.
Das mit der Schleife habe ich mir schon gedacht.
Habe nun noch eine Fehlermeldung:

Code:
//------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#pragma hdrstop

//------------------------------------------------

#pragma argsused

struct daten
{
char datensatz[200];
char test[200];
};

daten merker;
FILE *vin, *vout;

void aendern()
{
 fgets(merker.datensatz, 200, vin);

int zaehler=1;
int i=0; 

do
 {
  //if(merker.datensatz[i] == '    ')

  if( (i+4) < sizeof(merker.datensatz) &&                // es müssen noch mindestens 4 Zeichen kommen
       strncmp(&merker.datensatz[i], "    ", 4) == 0 )  // String-Vergleich{
    {
      merker.test[i]=merker.datensatz[i];
    }else
     {
      break;
     }i++;

 }while(zaehler!=0);
}


cout << merker.test << endl; //[C++ Fehler] access.cpp(50): E2141 Fehler in der Deklarationssyntax


void ausgabe()
{
 fprintf(vout, "%s", merker.test);
}

//------------------------------------------------
int main(int argc, char* argv[])
{

  vin = fopen ("test.log", "r");
  vout = fopen ("test1.log", "w");
  aendern();
  fclose(vin);
  fclose(vout);
  getch();
  return 0;
}
//------------------------------------------------
 
Genauso wie das printf in Deinem ersten Beispiel hast Du das cout außerhalb einer Funktion aufgerufen. Der Compiler erwartet an Dieser Stelle eine Deklaration bzw. eine Definition, aber keinen Funktionsaufruf. Anweisungen können nur innerhalb von Funktionsdefinitionen stehen.
 
Stimmt habe ich garnicht drauf geachtet.
Allerdigns klappt mein SChleife noch nicht, Er springt nicht in die Schleife rein.
Die Datei welche eingelesen wird, sieht so im Aufbau aus:

adfasdfas asdfasdfdas safdasdfds dfad(4 Leerzeichen)dasfdsaf dasfdfasdf(4 Leerzeichen)dfasdfd dafdsf ....
 
Das Programm springt schon in die Schleife hinein, allerdings gleich wieder heraus, da ja die Bedingung (vier Leerzeichen) nicht erfüllt ist.
Mir ist nicht ganz klar, was genau du eigentlich in der Schleife tun willst bzw. welche Daten denn eigentlich in "merker.test" landen sollen?

Gruß
MCoder
 
Zurück