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
相关产品推荐
相关产品推荐

