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

C语言scanf每次读取6个值而非3个、EOF终止功能失效问题咨询

问题根因

你代码的两个异常都是同一错误写法导致的:

  • 单次循环内连续调用了2次scanf("%d%d%f", ...),第一次调用读3个值、没有做任何检测,第二次调用又读3个值、才做EOF判断,两次累加就需要输入6个值才会进入下一轮循环,这是第一个问题的诱因。
  • EOF检测仅绑定了第二次scanf的返回值,第一次scanf遇到EOF时没有任何处理逻辑,自然无法触发循环终止,这是第二个问题的根因。
修复方案

仅保留单次scanf调用,直接对它的返回值做判断即可:

#define SIZE 7
#include<stdio.h>
int main()
{
    int NoOfDoors[SIZE];
    int CarManufYear[SIZE];
    float CarCost[SIZE];
    for(int i=0; i<SIZE; i++)
    {
        printf("\nEnter 3 values (Door, year, price):");
        // 单次调用scanf,直接判断返回值
        int ret = scanf("%d%d%f", &NoOfDoors[i], &CarManufYear[i], &CarCost[i]);
        if(ret == EOF)
        {
            break;
        }
        // 可选扩展:增加输入合法性判断,如果读入参数不足3个说明格式错误
        if(ret != 3)
        {
            printf("输入格式错误,请重新输入\n");
            // 清空输入缓冲区避免死循环
            while(getchar() != '\n');
            i--; // 回退下标,当前轮次重新输入
        }
    }
    printf("End of the code");
    return 0;
}
补充说明

scanf的返回值有两类情况:

  1. 正常输入时返回成功读取的参数个数,符合需求时该值为3
  2. 遇到EOF(Windows下按Ctrl+Z、Linux/macOS下按Ctrl+D)时返回EOF宏(值为-1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 12:42:04