wie input-Datei und es verwenden, um zu zählen groß - /Kleinbuchstaben, zahlen und Satzzeichen?
Mein Ziel ist einfach. Bitten Sie einen Benutzer für eine einfache text-Datei mit groß - /Kleinbuchstaben, Ziffern und Satzzeichen. Dann nehmen Sie die Datei, öffnen Sie Sie, und Scannen Sie für jedes der oben genannten Elemente halten eine Anzahl von jeweils. Schließlich, Ausgabe insgesamt für jeden (also insgesamt Großbuchstaben enthalten, insgesamt Kleinbuchstaben, total Ziffern und insgesamt Satzzeichen).
Leider, meine Frage ist nicht so einfach. Ich bin wirklich irritiert, wie genau (d.h. auf das Konzept und die syntax für) den Weg C geht eine input-Datei in eine Funktion wie fgetc und prüft dann, es zu Inkrementieren Zähler. Mein Programm abstürzt und ich ein wenig Ideen, warum. Ich denke, meine erste Frage ist dann, warum es abgestürzt ist? Mein code ist unten;
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
char Character = 0;
int words = 0;
int upper_case = 0;
int lower_case = 0;
int punctuation = 0;
int digits = 0;
int entered_words = 0;
char user_filename[100];
char user_filecontent[100];
printf("Enter the filename of the file containing text and/or digits:\n");
printf("(hit the Enter key when done)\n");
gets(user_filename);
FILE *fp;
fp = fopen (user_filename, "r");
if (fp == NULL)
{
printf("\nError, Unable to open the file for reading\n");
}
while((fp = fgetc(fp)) != EOF)
{
while((Character=fgetc(fp)) != '\n');
{
if (isalnum (Character))
{
if (!entered_words)
{
entered_words = 1;
words++;
}
}
else
{
if (entered_words)
{
entered_words = 0;
}
}
if (isupper(Character))
{
upper_case++;
}
else if (islower(Character))
{
lower_case++;
}
else if (isdigit(Character))
{
digits++;
}
else if (ispunct(Character))
{
punctuation++;
}
}
fclose(fp);
}
printf("Total number of words is %d.\n", words);
printf("Total number of digits are %d.\n", digits);
printf("Total number of uppercase letters is %d.\n", upper_case);
printf("Total number of lowercase letters is %d.\n", lower_case);
printf("Total number of punctuation characters is %d.\n", punctuation);
return 0;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entfernte ich die innere while-Schleife und zog die fclose-Funktion außerhalb der Schleife.
Sind Sie die Zuordnung zu Ihrem
FILE *fp
das Ergebnis einerfgetc
in Ihr, während test:Dies ist wahrscheinlich die Ursache für deinen Absturz.
fp
ist das handle auf die Datei, sobald Sie angerufen habenfopen
nach, dass Sie brauchen nur, um es zu übergeben, um Funktionen, die eineFILE *
wiefgetc
undfclose
.Auch Sie sind gefordert
fgetc
zweimal: einmal in derwhile
testen, und dann sofort folgenden, die in einem anderenwhile
test. Sie werden verlieren, Personen auf diese Art, auch nachdem Sie fix diefp
problem. Warum brauchen Sie die innere Schleife?fgetc
einmal und nur einmal für jedes Zeichen in der Datei. nennen Sie es nicht nur, um zu überprüfenEOF
.Mann fgetc erzählt
Müssen Sie eine int-variable zum speichern dieses Ergebnis