修正C语言代码格式说明符错误:字符串打印类型不匹配
修正C语言代码中的格式说明符警告问题
嘿,我一眼就看出你代码里的问题啦——那个格式说明符警告是因为你对课程名称数组的定义和使用不匹配导致的。
你现在定义的char nameOfClass[30]是一个单字符串的字符数组,只能存一个长度不超过29的课程名。但你需要存储多门课程的名称,所以得把它改成二维字符数组,这样才能容纳多个字符串。
具体来说,当你写nameOfClass[i]的时候,对于一维数组而言,你取的是第i个单个字符(类型是char,在printf里会被隐式转换为int),但%s格式符需要的是char*类型的字符串首地址,这就直接触发了类型不匹配的警告。
下面是修正后的完整代码:
#include <stdio.h> int main() { int numOfClasses; do{ printf("How many classes do you have?\t"); scanf("%d", &numOfClasses); }while(numOfClasses < 1); int count = numOfClasses; // 改成二维字符数组,[30]是课程数量上限,[50]是单门课程名的长度上限 char nameOfClass[30][50]; int numOfGrades[30]; printf("Which classes do you have, how many grades in each class?\n"); for(int i = 0; i < count; i++){ // 这里直接用nameOfClass[i],它就是第i个字符串的首地址 scanf("%s %d", nameOfClass[i], &numOfGrades[i]); } for(int i = 0; i < count; i++){ // 同样,nameOfClass[i]是字符串首地址,匹配%s格式符 printf("%s : %d\n", nameOfClass[i], numOfGrades[i]); } return 0; }
另外给你提个小建议:如果你的课程名称可能包含空格(比如"Data Structures"),那scanf("%s")就没法完整读取了,这时候可以换成fgets来读取字符串,不过记得处理掉换行符哦。
内容的提问来源于stack exchange,提问作者armin84
相关产品推荐
相关产品推荐

