So senden Sie EOF über das Windows-Terminal

Lesezeit: 2 Minuten

Benutzer-Avatar
804b18f832fb419fb142

Ich versuche, Beispiel 1.9 aus dem K&R-Buch zu verstehen, aber ich verstehe nicht, wie man EOF sendet. Einige Quellen erwähnten Ctr+Z, aber das beendet einfach das Programm. Ich habe es irgendwie geschafft, EOF mit einer Kombination aus Enter und Strg + Z und vielleicht Strg + V zu senden, aber ich kann es nicht reproduzieren.

#include <stdio.h>
#define MAXLINE 1000

main()
{
    int len;
    int max;
    char line[MAXLINE];
    char save[MAXLINE];

    max = 0;
    while((len = getline_my(line, MAXLINE)) > 0)
    if(len > max) {
        max = len;
        copy(line, save);
    }
    if(max > 0)
        printf("%s", save);
}

getline_my(s, lim)
char s[];
int lim;
{
    int c, i;

    for(i=0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; i++)// As long as the condition is fulfilled
        s[i] = c;
    if (c == '\n') {
        s[i] = c;
        i++;
    }
    s[i] = '\0';
    return(i);
}

copy(s1, s2)
char s1[];
char s2[];
{
    int i;

    i = 0;
    while((s2[i] = s1[i]) != '\0')
        i++;

}

Benutzer-Avatar
xag

Sie können EOF mit simulieren CTRL+D (für *nix) bzw CTRL+Z dann Enter (für Windows) von der Befehlszeile.

  • Dies hat bei mir nicht funktioniert (Windows 10 + Anaconda Terminal), aber die Antwort von @mauriceShun hat es getan.

    – MrMas

    10. Dezember 2017 um 2:25 Uhr

  • Dies funktioniert nicht unter Windows 7 cmd.exe (sendet kein EOF-Zeichen, nach dem das C-Programm sucht).

    – cmaceachern

    23. September 2019 um 13:48 Uhr

  • Unter Windows müssen Sie drücken ENTER nach CTRL+Z um es wirklich zu versenden.

    – Karl Walsch

    23. November 2019 um 19:31 Uhr

Benutzer-Avatar
Maurice Shun

Wenn Sie bereit sind, die Eingabe abzuschließen, drücken Sie in Witwen die Enter Taste und dann drücken Ctrl+Z und dann Enter um die Eingabe abzuschließen.

int main(){
    char ch[100];    
    scanf("%[^EOF]",ch);    
    printf("\nthe string is:\n%s\n",ch);    
    fflush(stdin);    
    return 0;    
    }

  • scanf("%[^EOF]",ch); und fflush(stdin); sind schlecht.

    – BLUEPIXY

    8. Dezember 2017 um 3:44 Uhr

  • Das ist eine völlig unsinnige Antwort!

    – Antti Haapala – Слава Україні

    22. Juni 2019 um 1:21 Uhr

  • Der Text ist korrekt, aber der Code… ist das ein Witz? Was macht "%[^EOF]" tun? Können Sie eine Ressource posten, wo dies dokumentiert ist? Und was ist fflush(stdin) tun soll?

    – wovano

    30. September 2021 um 5:58 Uhr

Letztendlich ist dies unter Windows angesichts des einfachen K&R-Codes, der für Unix-ähnliche Systeme gedacht war, nicht einfach zu bewerkstelligen. Sie können ‘^Z^M’ (Strg-Z und dann Enter) senden, um das Windows-Äquivalent von EOF zu senden, aber das Zeichen ‘EOF’, nach dem Sie in diesem C-Programm suchen, ist nicht dasselbe.

Kurze Antwort: Sie können nicht.

1383800cookie-checkSo senden Sie EOF über das Windows-Terminal

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy