在c中扫描文件和计算值时出现分段错误

在c中扫描文件和计算值时出现分段错误,c,fopen,scanf,C,Fopen,Scanf,我正在扫描一个文件,计算有多少字母是大写、小写、数字或其他字符; 它给了我一个错误的理由;我不太清楚为什么 这是我的密码 #include<stdio.h> #include<ctype.h> int main(void) { FILE *ifp, *ofp; char *mode = "r"; char words; int lengthOfWords, i; int uppercase=0, lowercase=0, digi

我正在扫描一个文件,计算有多少字母是大写、小写、数字或其他字符; 它给了我一个错误的理由;我不太清楚为什么 这是我的密码

#include<stdio.h>
#include<ctype.h>

int main(void)
{
    FILE *ifp, *ofp;
    char *mode = "r";
    char words;
    int lengthOfWords, i;
    int uppercase=0, lowercase=0, digits=0, other=0, total=0;

    ifp = fopen("story.txt", "r");

    if (ifp == NULL) {
        fprintf(stderr, "Can't open input file in.list!\n");
        return 0;
    }
    else
    {
        while(fscanf("%c", &words) != EOF)
        {
            if ((words>='A')&&(words<='Z'))
            {
                uppercase++;
            }
            else if ((words>='a')&&(words<='z'))
            {
                lowercase++;
            }
            else if ((words>='0')&&(words<='9'))
            {
                digits++;
            }
            else
            {
                other++;
            }
        }
    }
    printf("\n%d %d %d %d\n",uppercase, lowercase, digits, other );



return 0;

}

您忘记将
文件(流指针)作为
fscanf
函数的参数传递:

while (fscanf(ifp, "%c", &words) != EOF)
根据
fscanf的签名为:

int fscanf(FILE *restrict stream, const char *restrict format, ...);

fscanf(“%c”和&words)
-->
fscanf(ifp,“%c”和&words)
编译器至少应该为
fscanf(“%c”和&words)
提供一个警告。因此,即使我以前打开过,我也需要提供文件名。是的,因为
fscanf
函数不知道它从哪个流中读取。我只想计算字符,但不想输入空格,更不用说我得到了它,我只是添加了其他的,如果((words='')|(words='='\n'){}@user2948725
fopen
仅使文件在您指定的模式下可供您的程序使用。考虑以下内容:如果有多个文件<代码> fOpen< /COD>,哪个文件应该是代码> FSCANF?最后一个?如果你想读上一篇呢?如果您想以交替方式读取文件,该怎么办?~ ~使用后面有空格的格式字符串
“%c”
来使用和省略遇到的每个空白字符。
int fscanf(FILE *restrict stream, const char *restrict format, ...);