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

C语言报错main.c:20:1: expected identifier or '(' before '{' token求助

解决你遇到的C语言语法错误与逻辑问题

首先,咱们先搞定那个直接触发报错的语法问题:

main.c:20:1: error: expected identifier or '(' before '{' token

这个错误的根源很明确——你在main()函数结束的return 0;}之后,写了一段没有归属的代码块:

{ int arr[20]; int l; for (l =...

C语言里,用{}包裹的代码块不能直接放在全局作用域,必须属于某个函数内部。你要么把这段代码移到main或者其他函数里,要么直接删掉它(看你的需求是输入5个整数并输出,这段代码看起来是多余的),删掉后就能立刻解决这个语法错误。

接下来,咱们聊聊你的PrintArray函数的逻辑问题——虽然它暂时没触发语法报错,但根本实现不了“输入5个整数到数组”的功能:

  • 你把i作为递归的索引参数,却又用scanf("%d", &i);修改了它的值,这会彻底打乱递归的执行逻辑,而且你完全没把输入的值存到number数组里
  • 递归的终止条件是i < 0返回,但你初始调用的是PrintArray(number, 5),递归过程中i会从5递减到-1,全程没有正确给数组元素赋值

这里给你修正后的完整代码,既能解决语法错误,又能实现你想要的功能:

#include <stdio.h>

void PrintArray(int number[], int i) {
    if (i >= 5) return; // 终止条件:当i达到5时停止递归(数组索引是0-4)
    printf("Please enter integer %d: ", i + 1);
    scanf("%d", &number[i]); // 把输入的值存到数组对应的索引位置
    PrintArray(number, i + 1); // 递归处理下一个数组元素
}

int main() {
    int number[5];
    PrintArray(number, 0); // 从数组的第0个元素开始输入
    
    printf("Here are your integers: ");
    for (int j = 0; j < 5; j++) {
        printf("%d ", number[j]); // 输出所有输入的5个整数
    }
    printf("\n");
    return 0;
}

关键修正点说明:

  • 移除了全局作用域下的多余代码块,彻底解决语法错误
  • 调整了递归的终止条件和参数传递方向,从索引0开始递增到4,符合数组的索引规则
  • 把输入的值正确存储到number数组的对应位置,不再修改递归参数i
  • 最后用循环输出所有输入的整数,而不是只输出数组的最后一个元素

这样运行后,就能正常让你输入5个整数,然后完整输出所有内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:39:50