私の目標は単純です。大文字/小文字、数字、句読点を含む単純なテキストファイルをユーザーに要求します。次に、ファイルを取得して開き、前述の各要素をスキャンして、それぞれの数を数えます。最後に、それぞれの合計を出力します(つまり、含まれる大文字の合計、小文字の合計、数字の合計、句読点の合計)。
残念ながら、私の質問はそれほど単純ではありません。Cが入力ファイルをfgetcのような関数に渡し、それをテストしてカウンターをインクリメントする方法がどれほど正確であるか(つまり、の概念と構文)、私は本当に混乱しています。プログラムがクラッシュし、その理由が不足しています。私の最初の質問は、なぜクラッシュするのかということだと思います。私のコードは以下の通りです。
#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;
}