Codeblock编译C++代码出现endl调用错误、scanf警告等问题求助
问题排查与修复方案
1. error: no matching function for call to 'endl(const char [6], int)'报错修复
endl是C++标准库中仅适用于cout输出流的换行操纵符,不能放入printf函数中使用。你代码中所有混用printf和endl的写法都属于语法错误,两种修正方案二选一:
- 继续用
printf:直接用\n实现换行,比如错误行printf(endl("X: %i", So_hang_thu_nhat + So_hang_con_lai)endl);修改为printf("\nX: %i\n", So_hang_thu_nhat + So_hang_con_lai); - 切换为
cout输出:用你注释里的正确写法,比如cout << endl << "X: " << So_hang_thu_nhat + So_hang_con_lai << endl;
2. warning: format '%i' expects argument of type 'int*', but argument 2 has type 'int'警告修复
scanf函数要求传入变量的内存地址来存储输入值,你当前所有scanf调用都直接传入了变量名,缺少取地址符&。所有scanf语句都要修正,比如:
- 原代码:
scanf("%i", Cau_tra_loi); - 修改为:
scanf("%i", &Cau_tra_loi);
其余所有scanf调用都按上述规则为第二个参数添加&即可解决该警告。
3. 定义的标签无法生效问题修复
C++中标签仅定义不会自动生效,需要配合goto语句跳转才能触发。你当前代码只定义了cau_tra_loi_chung、buoc_tra_loi_phan_1等标签,没有对应的goto语句调用。如果需要实现错误重试逻辑,可以在报错分支添加跳转:
- 比如运算符输入错误的
default分支,打印错误后添加goto cau_tra_loi_chung;,即可让用户重新输入运算符 - 比如运算类型输入超出范围的分支,打印错误后添加对应
goto buoc_tra_loi_phan_x语句,即可让用户重新选择运算类型
内容的提问来源于stack exchange,提问作者le_quoc_bao
相关产品推荐
相关产品推荐

