Problem mit EOF in C

Ich schreibe ein Programm, das zwei Zeichenfolgen lesen soll, die Zeilenumbrüche und verschiedene andere Zeichen enthalten können. Daher verwende ich EOF (Strg-Z oder Strg-D), um die Zeichenfolge zu beenden.

Dies funktioniert gut mit der ersten Variablen, aber mit der zweiten Variable scheint dies problematisch zu sein, da anscheinend etwas im Eingabepuffer steckt und der Benutzer nichts eingeben kann.

Ich habe versucht, den Puffer mit zu reinigenwhile (getchar() != '\n'); und mehrere ähnliche Variationen, aber nichts scheint zu helfen. Alle Reinigungsversuche haben zu einer Endlosschleife geführt, und ohne Reinigung ist das Hinzufügen der zweiten Variablen nicht möglich.

Die Zeichen für beide Variablen werden in einer Schleife wie folgt gelesen:while((c = getchar()) != EOF), was darauf hindeuten würde, dass es EOF ist, was ich in meinem Puffer festgehalten habe. Oder wirkt es sich auf andere Weise auf das Verhalten des Programms aus? Stimmt etwas mit der von mir verwendeten Logik nicht?

Ich fange an, ein bisschen verzweifelt zu werden, nachdem ich stundenlang damit gekämpft habe.

[edit: Code unten hinzugefügt]

[edit 2: clearerr () scheint diese EOF-Lösung doch zum Laufen zu bringen.

Es scheint in seiner ursprünglichen Form zu laufen, wie ich es unter Linux beabsichtigt hatte. Ich habe es gestern mit Windows versucht.]

Code:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int x = 0;
    int c;
    char a[100];
    char b[100];

    printf("Enter a: ");
    while((c = getchar()) != EOF)
    {
        a[x] = c;
        x++;
    }
    a[x] = '\0';
    x = 0;

    /*while (getchar() != '\n'); - the non-working loop*/

    printf("\nEnter b: ");
    while((c = getchar()) != EOF)
    {
        b[x] = c;
        x++;
    }
    b[x] = '\0';

    printf("\n\nResults:\na: %s\n", a);
    printf("b: %s\n", b);

    return(0);
}

[edit 3:]

Dynamisches Speicherproblem:

Mein Programm soll auch Zeichenfolgen verarbeiten, die länger als 100 Zeichen sind. Ursprünglich wollte ich das durch dynamische Speicherzuweisung lösen, aber als ich Probleme mit der oben beschriebenen Endlosschleife und speicherbedingten Abstürzen hatte, ließ ich es weg und wechselte zu char [100].

Ich denke, was ich ausprobiert habe, war im Allgemeinen ungefähr so:

while((c = getchar()) != EOF)
{
  a = malloc(sizeof(char));
  a[x] = c;
  x++;
}

Ist das ein möglicher (oder vernünftiger) Weg, das zu tun? Ich versuche, jedem Zeichen, das dort behandelt wird, mehr Speicherplatz zuzuweisen. Individuell. Mit solchem ​​Code (dieses Beispiel enthält wahrscheinlich Syntaxfehler) kam es zu Abstürzen. Daher ist malloc für mich möglicherweise nicht die richtige Funktion, oder ich versuche es falsch. Angenommen, es ist sogar möglich.

Antworten auf die Frage(7)

Ihre Antwort auf die Frage