Ich habe den folgenden Code, der jedes Eingabewort in einer separaten Zeile anzeigen soll. Für Tritte habe ich eine printf
platziert, um die Wortzählung nach jedem Wort anzuzeigen, um sicherzustellen, dass ich die Logik verstanden habe.Interessanter Wert, wenn nicht auf 0 initialisiert
#include <stdio.h>
/*Write a program that prints its input one word per line*/
#define IN 1
#define OUT 0
int main()
{
int c, state, wordcount;
state = OUT;
while ((c = getchar()) != EOF)
{
if (c == ' ' || c == '\t' || c == '\n')
{
if (state == IN)
{
printf("\n");
printf("Current word count: %i\n", wordcount);
/*troubleshooting*/
state = OUT;
}
}
else if (state == OUT)
{
state = IN;
putchar(c);
++wordcount;
}
else
{
putchar(c);
}
}
}
Der Ausgang dafür ist in diesem Bild gezeigt. Aus irgendeinem Grund, ohne die Variable initialisiert zunächst wordcount auf 0, es beginnt am 9.
Wordcount variable gets set to 9 when it is not initialized to 0
Wenn die wordcount Variable auf 0 initialisiert (nur Einstellung wordcount = 0 in der int Deklarationsanweisung), alles funktioniert wie erwartet:
Wordcount variable is correct when initialized to 0
Kann mir jemand erklären, was hier los ist? Hat das etwas damit zu tun, wie diese Variablen im Speicher gespeichert werden? Versuchen zu verstehen, was vor sich geht. Vielen Dank!
Was ist '' innen? 'state' wurde nicht initialisiert. – babon
Undefiniertes Verhalten. –
Sie möchten die reine C-Erklärung oder die Erklärung, die sich auf die C-Kompilierung bezieht? – StoryTeller