C语言零食菜单打印代码输出乱码,求错误排查
代码错误点整理
- 函数声明不匹配:
ShowMenu()的声明没有写参数列表,和实际定义、调用的参数不一致,属于语法隐患。 - 字符串操作逻辑完全错误:
- 用
==比较运算符做赋值操作,不符合C语言语法要求 - C语言不支持直接给字符数组赋值字符串,需要调用
<string.h>头文件中的strcpy函数实现 snack[0][20]属于越界访问,snack[0]作为长度20的字符数组,合法下标范围是0~19,你要操作的是第i个字符串的首地址snack[i],不是单个元素
- 用
- 输出参数错误:
printf输出字符串时传入的是二维数组snack的首地址,不是对应下标i的零食名字snack[i];同时你要输出美元符号$,代码里写的是RM,和预期不符。你看到的乱码就是未正确赋值的字符数组输出了内存随机垃圾数据导致的 - 冗余逻辑:
price不需要定义为二维数组,双层for循环的j层完全多余,只会重复执行无意义逻辑 - 缺少必要头文件:字符串操作需要引入
<string.h>头文件
修正后的完整代码
#include <stdio.h> #include <string.h> // 函数声明和定义参数保持一致 void ShowMenu(float price[4], char snack[4][20]); int main() { // 价格改为一维数组即可 float price[4] = {1, 1.2, 5, 0.9}; char snack[4][20]; ShowMenu(price, snack); return 0; } void ShowMenu(float price[4], char snack[4][20]) { for (int i=0; i<4; i++) { // 用strcpy给对应位置的字符数组赋值字符串 if(i==0) strcpy(snack[0], "chocolate bar"); else if(i==1) strcpy(snack[1], "skittles"); else if(i==2) strcpy(snack[2], "marshmellows"); else if(i==3) strcpy(snack[3], "candy-cane"); // 左对齐输出保证格式整齐,替换为$符号 printf("%-16s$%.2f\n", snack[i], price[i]); } }
内容的提问来源于stack exchange,提问作者Tiosu
相关产品推荐
相关产品推荐

