C语言符号矩形打印程序输入列数无效固定输出10列问题求助
问题原因分析
- 核心问题出在你代码里的
scanf("%c");这一行,这里调用scanf读取字符时没有传入存储读取结果的变量地址,属于未定义行为。 - 你原本的意图是读取输入列数后残留在输入缓冲区的换行符,避免后续读取symbol时读到空字符,但因为scanf缺少接收参数,读取到的换行符(ASCII码值恰好为10)被意外写入了存储
columns变量的内存地址,直接覆盖了你之前输入的列数值,所以不管输入什么列数,最终columns都会被改为10,输出固定10列的符号。你测试删除符号输入相关逻辑后程序正常,就是因为连带删除了这行错误的scanf,columns不会再被意外覆盖。
修复方案
有两种可选修复方式,更推荐第二种写法更简洁:
- 补全异常行的接收参数,专门存储要丢弃的换行符:
把scanf("%c");修改为char discard; scanf("%c", &discard); - 直接删除多余的异常行,在读取符号的格式符前加空格,自动跳过缓冲区所有残留的空白字符(包括换行、空格、制表符等):
#include <stdio.h> int main() { int rows; int columns; char symbol; printf("\nEnter # of rows: "); scanf("%d", &rows); printf("Enter # of columns: "); scanf("%d", &columns); printf("Enter a symbol: "); // %c前的空格会自动跳过所有前置空白字符 scanf(" %c", &symbol); for(int i = 1; i <= rows; i++) { for(int j = 1; j <= columns; j++) { printf("%c", symbol); } printf("\n"); } return 0; }
内容的提问来源于stack exchange,提问作者begger
相关产品推荐
相关产品推荐

