C语言,菜鸟驿站,比较简单的小问题。

#include<stdio.h>
void chline(char, int, int);
int main(void)
{
    int rows, column;
    char ch;
    while (scanf("%c %d %d",&ch,&rows,&column) != 'q')
    {
        if (ch == '\n')
            continue;
         chline(ch, rows, column);
        
    }
    return 0;
}
void chline(char ch1, int a, int b)
{
    int rows, column;
    
    for (rows = 0; rows< a; rows++)
    {
        for (column= 0; column < b; column++)
            putchar(ch1);
        printf("\n");
    }

}

输入”! 2 3 ”。打印正确,输入” q q q ”为什么不退出呢。好奇怪的代码,我咋打出来的。我也迷糊,求指教~~~

注意看,你输入的后面两个参数是int类型的,当你输入char字符类型时,就会发生类型错误,然后报错。

你应该写一个输入退出的判定。

scanf的返回值是正确接收值的个数或者-1(EOF)

scanf("%c %d %d",&ch,&rows,&column)这条语句最大返回3,比如“! 1 2”,就是返回3,而"q q q",返回的是1,只有第一个q是正确接收的。

而q的ascii码是113,所以程序会一直在while里。

while (scanf("%c %d %d",&ch,&rows,&column) != 'q'),循环判定条件不明确,同时输入三个,无法判断通过执行对哪一个的判断来结束循环