Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » EOF Verarbeitung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.03.2005, 07:58 Uhr
~Avador
Gast


Moin Leute,
ich habe ein riesen Problem, welches ich auch über die suchen Funktion noch nicht lösen konnte:
Bin gerade am C lernen mit Kernighan/Ritchie ind so ziemlich alle Quellcodes haben irgendwo ein

(c = getchar)!=EOF

oder so ähnlich. Ich habe keine Ahnung, wie ich das Programm zur Ausführung bringen kann. Prorammiere gerade den Quellcode von Seite 28(wer´s vorliegen hat), kann mein Prog aber nicht testen. Wie bekomme ich das hin?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.03.2005, 08:15 Uhr
enno-tyrant
Frag nicht!


also ich hab das buch gerade nicht vor mir (oder sonst wo ) aber:


C++:
c = getchar();



bedeutet das der variablen 'c' die tastatureingabe übergeben wird. das EOF steht sicherlich in einer if-anweisung und bedeutet 'end of file', alles zusammen würde ich so interpretieren:

C++:
if((c=getchar())!=EOF)



lese solange zeichen ein bis das ende der datei erreicht ist.

weitere vorschläge?
--
...um etwas zu verstehen muß man wissen wie es funktioniert...

Dieser Post wurde am 03.03.2005 um 08:17 Uhr von enno-tyrant editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.03.2005, 08:17 Uhr
~Avador
Gast


Quellcode insgesamt sieht so aus:

C++:
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

main()
{
    int len;
    int max;
    char line[MAXLINE];
    char longest[MAXLINE];
    
    max = 0;
    while ((len = getline(line, MAXLINE)) >0)
        if(len > max) {
                max = len;
                copy(longest, line);
        }
        
        if (max > 0)
                printf("%s", longest);
        return 0;
}

int getline(char s[], int lim)
{
    int c, i;
    for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}
void copy(char to[], char from[])
{
    int i;
    i = 0;
    while ((to[i] = from[i]) !='\0')
        ++i;
}



Wie bringe ich das Programm zur Funktion?

Bearbeitung von 0xdeadbeef:

cpp-tags eingefügt. Nächstes mal selbst machen.


Dieser Post wurde am 03.03.2005 um 09:05 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.03.2005, 08:21 Uhr
enno-tyrant
Frag nicht!


also bei mir läufts was genau ist deine frage?
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
03.03.2005, 08:45 Uhr
~Avador
Gast


Bei mir öffnet sich auch eine Eigabefenster und ich kann auch die Eingaben machen, neue Zeilen beginnen usw., aber ich kann die Auswertung nicht starten, soll heißen ich habe keine Ahnung, wie ich mir die längste Zeile anzeigen lassen kann.
Programmieren tue ich mit Def-C++ unter Win98, kann es damit was zu tun haben?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
03.03.2005, 09:17 Uhr
enno-tyrant
Frag nicht!


naja, irgendwie hast du zwei schleifen vergessen:


C++:
#include <stdio.h>
#define MAXLINE 1000

int getline(char line[], int maxline);
void copy(char to[], char from[]);

int main()
{
    int len;
    int max=0;
    char line[MAXLINE];
    char longest[MAXLINE];

    while ((len = getline(line, MAXLINE)) > 0)
    { // hier
        if(len > max)
        {
            max = len;
            copy(longest, line);
        }
        if (max > 0)
            printf("%s", longest);
    } // hier
        return 0;
}

int getline(char s[], int lim)
{
    int  c=0, i;
    for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
    { // hier
        s[i] = c;
        if (c == '\n')
        {
            s[i] = c;
            ++i;
        }
    } // und hier
    s[i] = '\0';
    return i;
}

void copy(char to[], char from[])
{
    int i;
    i = 0;
    while ((to[i] = from[i]) !='\0')
        ++i;
}


--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
03.03.2005, 09:17 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <stdio.h>
#include <string.h> /* für strncpy */

/* Für den Fall, dass MAX_LINE noch nicht definiert ist -
* auf diese Art kannst du beim Kompilieren bei Bedarf
* nen anderen Wert angeben. */

#ifndef MAX_LINE
#define MAX_LINE 1000
#endif

int main(void) {
  char longest[MAX_LINE] = "", line[MAX_LINE] = "";
  int max = 0, tmp = 0;

  do {
    fgets(line, MAX_LINE, stdin);
    tmp = strlen(line);
    if(max < tmp) {
      max = tmp;
      strncpy(longest, line, MAX_LINE);
    }
  } while(line[0] != '\n');

  printf("%d Zeichen\n%s", max, longest);

#ifdef __WIN32__
  getchar(); /* Auf Enter warten. Unter Windows ist das
              * üblich, weil da keiner die Shell benutzt. */

#endif

  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 03.03.2005 um 09:18 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
03.03.2005, 09:35 Uhr
~Avador
Gast


...uuuups...

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
03.03.2005, 09:51 Uhr
~Avador
Gast


Habe das eben alles nochmal nachgeprüft und eigentlich fehlen mir nur die beiden geschweiften Klammerpaare, die im Buch allerdings auch nicht enthalten sind...

Ich habe das mal eben korrigiert... Nochmal Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: