Announcement

Collapse
No announcement yet.

C datei mit getchar() einlesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • C datei mit getchar() einlesen

    Hallo,

    Ich muss eine datei mit getchart() einlesen, und dann ueberpruefen, ob nicht am ende einer zeile sich ein leerzeichen oder ein tabulator befindet.

    intput.txt sieht so aus:
    5689
    5411(Da ist zum bsp ein leerzeichen)
    4668
    0000


    Leider erkenne ich das leerzeichen nicht, wobei ich nur die Stdio benutzen darf.

    Code:
    #include <stdio.h>
    
    
    int main() {
    
    	int c;
    	char array[16];
    	int position = 0;
    
    //TODO Leerzeichen bzw tab herausfinden.
    
    	while((c=getchar())) {
    
        if (c=='.') {
          return 1;       //ist ein exit damit ich das dosfenster nicht immer starten muss
        } 
    
    		if ((c != 0x09)||(c!=0x20)) {  // die beiden hex stehen fuer tab und space
    			array[position] = c; 
    			putchar(c); 
    			position++;
    		  // printf("test");
    		  if(c==EOF)
    			{
    			return 2;
    			}
    		}
    		else {
    			printf("weil leerzeichen sollte ausgelassen werden");
    		}
    
    	}
    
    	return 0;
    }
    Zuletzt editiert von jester; 08.03.2014, 10:56.

  • #2
    if ((c != 0x09)&&(c!=0x20))
    Christian

    Comment


    • #3
      danke. es funktioniert, aber warum?

      bei oder muss ja nur eines der beiden richtig sein - wenn das erste wahr ist dann geht er ja aber nicht mehr zum zweiten...

      bei und muessen ja beide wahr sein oda?

      Comment


      • #4
        Weil du negierst

        Wenn x nicht TAB ist UND x nicht LEER ist (nur wenn x kein TAB und x auch kein LEER), dann mache was

        Anders

        Wenn x ist TAB ODER x ist LEER, dann mache was NICHT
        Zuletzt editiert von Christian Marquardt; 08.03.2014, 16:03.
        Christian

        Comment


        • #5
          danke, hab wohl zu lange den bildschrim angeschaut

          Comment


          • #6
            Wie muss ich vorehen, um beim else 5411(Da ist zum bsp ein leerzeichen) ausgelassen wird, da ich diese zeile aussortieren moechte?


            ich stell mir das array so vor: 0568\n6666\n5598\n

            da muesste ich die position zurueckschieben bis zum letzten \n?

            oder gibt es da eine bessere variante?

            Comment


            • #7
              Alle Zeichen in einem buffer sameln.
              Wenn das Zeilenende erreicht ist und es ist kein Leerzeichen drin -> buffer weitervearbeiten -> buffer löschen und nächste Zeile lesen
              Wenn das Zeilenende erreicht ist und es ist ein Leerzeichen drin -> buffer löschen und nächste Zeile lesen
              Christian

              Comment


              • #8
                mhm irgendwie klappt das nicht...
                programm kommt staedig zum absturz...


                Code:
                #include <stdio.h>
                
                int main() {
                
                	int c;
                	char array[20];
                	int position = 0;
                
                //TODO Herausfinden, wenn LF dann array abschneiden und neuen
                
                	while((c=getchar())) {
                
                	//	if((c!=0x09)&&(c!=0x20))  { 
                			array[position] = c; 
                			if(array[position]=='\n')
                			{
                				printf("%s\n", array);
                				position=-1;
                			}
                			position++;
                	/*	}
                	  else {
                	  printf("beer\n");
                	  }
                	 */ 
                //TODO Array soll ausgegeben werden 
                		}
                
                		if(c==EOF)
                		{
                		return 2;
                		}
                		
                	
                
                	return 0;
                }

                Comment


                • #9
                  a) du bist sicher, dass ein Unix \n Zeilenumbruch vorhanden ist und nicht ein Windows-Zeilenumbruch (2 Zeichen \r\n)?

                  b) würde ich das Programm wie folgt gliedern:


                  char buff[50];
                  bool istLeer=false;
                  while-Schleife liest Zeichen

                  Wenn Zeichen LEER oder TAB -> istLeer=true;

                  Wenn Zeichen UMBRUCH -> die Zeile ist zu Ende -> Wenn istLEER==true -> buff löschen und istLeer=false ansonsten buff in Array zur Ausgabe kopieren-> buff löschen und istLeer=false

                  Ansonsten -> Zeichen in buff aufnehmen

                  while-Scheife Ende

                  Array ausgeben
                  Christian

                  Comment


                  • #10
                    hab cygwin installiert deswegen denke is, dass es wie bei unix ist, da ein gcc compiler lauft.

                    Comment


                    • #11
                      Es ist so, wie die Datei erzeugt wurde und richtet sich nach dem Betriebsystem. Ggf. mit einem Hexeditor prüfen.

                      Und das Programm debuggen
                      Christian

                      Comment


                      • #12
                        wie loescht man einen buffer (hier wird wahrscheinlich array gmeint sein)?


                        nach was muss ich schauen im hexeditor?

                        Comment


                        • #13
                          memset (buff,0,Länge);
                          Christian

                          Comment


                          • #14
                            ich darf nur stio.h benutzen...


                            kann ich nicht fuer 'n' ein '\0' schreiben?

                            Comment


                            • #15
                              Verstehe ich nicht

                              EDIT

                              Dann mach eine Schleife über die Länge des Arrays und setze alles auf 0


                              ich darf nur stio.h benutzen...
                              Idiotische Aufgabe aus der Uni/Schule....
                              Christian

                              Comment

                              Working...
                              X