You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言代码执行while语句后抛出异常,求排查指导

问题排查与修复方案

你的代码抛出异常主要有以下几个原因,逐个排查修复即可:

  • 缺少必要头文件:isalpha()和isdigit()属于字符处理函数,需要包含<ctype.h>头文件,否则函数调用可能触发未定义行为。
  • 未检查文件打开是否成功:如果infile.txt不存在、路径错误或者没有读取权限,fopen()会返回NULL,此时调用getc(fp)会直接导致程序崩溃。
  • 文件关闭函数使用错误:C标准中关闭FILE*类型的文件指针应该用fclose(),而非close()——close()是用于操作文件描述符(整数类型)的函数,传入FILE*会引发错误。

修复后的代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h> // 新增字符处理头文件

int main(void)
{
    int charCounter = 0;
    int intCounter = 0;
    int otherCounter = 0;
    int ch;
    FILE* fp;

    // 检查文件是否成功打开
    fp = fopen("infile.txt", "r");
    if (fp == NULL) {
        printf("无法打开文件 infile.txt\n");
        return 1; // 异常退出程序
    }

    while ((ch = getc(fp)) != EOF) {
        if (isalpha(ch)) {
            charCounter += 1;
        }
        else if (isdigit(ch)) {
            intCounter += 1;
        }
        else {
            otherCounter += 1;
        }
    }

    printf("字母数量:%d\n数字数量:%d\n其他字符数量:%d\n", charCounter, intCounter, otherCounter);
    
    fclose(fp); // 使用正确的文件关闭函数
    return 0;
}

另外注意:确保infile.txt和程序可执行文件在同一目录下,或者使用完整文件路径(比如"C:\\test\\infile.txt")。

内容的提问来源于stack exchange,提问作者Travis Entner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:55:28