









找出下面程序中的错误:
define B booboo define X 10 main(int) { int age; char name; printf("Please enter your first name."); scanf("%s", name); printf("All right, %c, what's your age?\n", name); scanf("%f", age); xp = age + X; printf("That's a %s! You must be at least %d.\n", B, xp); rerun 0; }
# 预处理指令前缀define B booboo // ❌ 错误 define X 10 // ❌ 错误
应改为:
#define B booboo // ✅ 正确 #define X 10 // ✅ 正确
main 函数声明错误应改为(标准形式):
int main(void) // ✅ 正确 // 或者 int main(int argc, char *argv[]) // 如果需要命令行参数
name 应该是字符数组而非单个字符char name; // ❌ 错误 - 只能存储一个字符
应改为:
char name[50]; // ✅ 正确 - 可以存储字符串 // 或动态分配内存
scanf 格式说明符与变量类型不匹配scanf("%s", name); // ❌ 部分错误
如果 name 是字符数组,%s 正确
但如果是单个字符 char name,则用 %c
修正后(使用字符数组):
scanf("%s", name); // ✅ 正确(name 是数组名,本身就是地址)
printf 格式说明符与变量类型不匹配printf("All right, %c, what's your age?\n", name); // ❌ 错误
%c 用于单个字符,但 name 现在应该是字符串
应改为:
printf("All right, %s, what's your age?\n", name); // ✅ 正确
scanf 格式说明符错误且缺少取地址符 &scanf("%f", age); // ❌ 两个错误
%f 用于 float,但 age 声明为 int& 取地址运算符应改为:
int age; // 保持 int scanf("%d", &age); // ✅ 正确 - 使用 %d 和 &age
xp 未声明xp = age + X; // ❌ 错误 - xp 未声明
应改为:
int xp; // 先声明 xp = age + X; // ✅ 正确
printf("That's a %s! You must be at least %d.\n", B, xp); // ❌ 错误
B 被定义为 booboo,但这里需要带双引号的字符串应改为:
#define B "booboo" // 在宏定义中加引号 // 或者 printf("That's a %s! You must be at least %d.\n", "booboo", xp);
rerun 0; // ❌ 错误 - 应该用 return
应改为:
#include <stdio.h> // 添加必要的头文件 #define B "booboo" // 修正1: 添加 # 和引号 #define X 10 // 修正2: 添加 # int main(void) // 修正3: 正确的 main 声明 { int age; char name[50]; // 修正4: 改为字符数组 int xp; // 修正5: 声明 xp printf("Please enter your first name."); scanf("%s", name); // 修正6: 正确使用 printf("All right, %s, what's your age?\n", name); // 修正7: %s scanf("%d", &age); // 修正8: %d 和 &age xp = age + X; // 修正9: 正确赋值 printf("That's a %s! You must be at least %d.\n", B, xp); return 0; // 修正10: 正确的返回语句 }
修复所有错误后,使用以下命令编译:
gcc -Wall -Wextra program.c -o program
加上 -Wall -Wextra 可以让编译器显示更多警告,帮助发现潜在问题。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。