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

C语言逐行打印与问答数组实现技术求助

C语言循环打印与问答数组存储问题解答

问题1:用for循环逐行打印后执行扫描操作

要实现逐行打印后执行扫描操作,核心思路是先把文件内容读取到内存数组中,再用for循环控制打印节奏,之后就能灵活添加扫描/输入操作了。

给你举个简单的实现示例:

#include <stdio.h>

int main() {
    char lines[10][250]; // 预设最多存10行,每行250字符
    int line_count = 0;
    FILE *fp = fopen("quest.txt", "r");
    
    // 必须先检查文件是否成功打开
    if (!fp) { 
        perror("Failed to open file");
        return 1;
    }

    // 先把文件内容批量读取到数组
    while (fgets(lines[line_count], 250, fp) != NULL && line_count < 10) {
        line_count++;
    }
    fclose(fp);

    // 用for循环逐行打印
    for (int i = 0; i < line_count; i++) {
        printf("第%d行:%s", i+1, lines[i]);
    }

    // 打印完成后执行扫描操作,比如读取用户输入
    char input[250];
    printf("\n请输入内容:");
    fgets(input, 250, stdin);
    printf("你输入的内容是:%s", input);

    return 0;
}

这里的关键是先把文件内容加载到内存数组,再用for循环控制打印节奏,之后想加任何扫描、输入操作都能灵活放在循环之后。


问题2:用while+for循环逐个提问并存答案

你代码里的核心问题有两个:

  • char *b [40][250]; 是错误的定义,这是二维指针数组,没法直接存字符串,应该和你定义的qa结构体匹配使用
  • 原代码的while(fgets(b, sizeof(b), fp))会一次性读取整个文件内容,且类型不匹配,导致直接输出全部内容

我直接修改你的代码,实现读取11个问题、逐个提问、将答案存入数组的需求:

#include <stdio.h>
#include <string.h>

// 复用你定义的结构体来存问题和答案
typedef struct{ 
    char q[40][250]; // 最多存40个问题,每个问题250字符
    char a[40][250]; // 对应存储答案
} qa; 

int main() {
    qa quiz; // 定义结构体实例
    int question_count = 0;
    FILE *fp = fopen("quest.txt", "r");
    
    if (!fp) {
        perror("无法打开问题文件");
        return 1;
    }

    // 用while循环读取文件中的11个问题到结构体的q数组
    while (fgets(quiz.q[question_count], 250, fp) != NULL && question_count < 11) {
        // 去掉fgets自动读取的换行符,避免打印时出现多余空行
        quiz.q[question_count][strcspn(quiz.q[question_count], "\n")] = '\0';
        question_count++;
    }
    fclose(fp);

    // 用for循环逐个提问,把答案存入数组(这里直接用结构体的a数组,你也可以换成单独的a1数组)
    for (int i = 0; i < question_count; i++) {
        printf("问题%d:%s\n请输入你的答案:", i+1, quiz.q[i]);
        // 读取用户答案,同时清除输入缓冲区的换行符
        fgets(quiz.a[i], 250, stdin);
        quiz.a[i][strcspn(quiz.a[i], "\n")] = '\0'; // 去掉答案里的换行符
    }

    // 测试打印已存储的答案
    printf("\n你的答案汇总:\n");
    for (int i = 0; i < question_count; i++) {
        printf("问题%d答案:%s\n", i+1, quiz.a[i]);
    }

    return 0;
}

核心逻辑说明:

  1. 先用while循环批量读取文件中的11个问题到结构体数组,同时限制读取数量避免数组越界
  2. 用strcspn处理换行符,保证打印和存储的内容格式整洁
  3. 再用for循环逐个遍历问题数组,打印问题后读取用户答案并存储
  4. 始终记得检查文件是否打开成功,避免程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:34:00