获取用户输入字符时,命令控制台中printf语句之间存在巨大间隙[duplicate]

ilmyapht  于 2022-12-02  发布在  其他
关注(0)|答案(1)|浏览(62)

此问题在此处已有答案

scanf() leaves the newline character in the buffer(7个答案)
7小时前关闭。
为什么当我尝试输入字符时,命令中心会产生巨大的空白?程序的目的是输入正方形的边长并用输入的字符填充它。谢谢!

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void sides(void);

int main(void) {
    sides();
    return 0;
}

void sides(void) {
    int input;
    char inputChar;
    printf("Enter sides of parking lot:  ");
    scanf_s("%d", &input);
    printf("Enter desired character:  ");
    scanf_s("%c", &inputChar, 1);
    int x, y;
    while (input != -1) {
        for (y = 0; y < input; y++) {
            for (x = 0; x < input; x++) {
                printf("%c",inputChar);
            }
            printf("\n");
        }
        printf("Enter sides of parking lot:  ");
        scanf_s("%d", &input);
        printf("Enter desired character:  \n");
        scanf_s("%c", &inputChar, 1);
    }
}

我期望

Enter sides of parking lot: 5
Enter desired character: *
*****
*****
*****
*****
*****

我得到的是一个无意的间隙

Enter sides of parking lot:  5
Enter desired character:



















Enter sides of parking lot:  *
Enter desired character:
*****
*****
*****
*****
*****
Enter sides of parking lot:
ia2d9nvy

ia2d9nvy1#

你的scanf("%c", &inputChar)(好吧,你的scanf_s,但我猜是做同样的事情。但scanf_s是非标准的,我没有办法测试它),正在阅读前一个输入的尾随\n
当你输入scanf("%d", &input)时,它只读取整数的组成部分,比如数字,但是你在键盘上输入的是一些数字,然后是一个RETURN('\n'),\n仍然在缓冲区中等待读取。
一个简单的解决方法是,假设您不希望inputChar成为空格,则将
scanf("%c", &inputChar)

scanf(" %c", &inputChar)
然后scanf将假定您不仅对下一个字符感兴趣,而且对一些分隔符(空格和\n)之后的下一个字符感兴趣
如果你需要在inputChar中有一个空格的能力,也就是说,如果你想让用户能够用一个空格来回答问题“input desired characters”,那么你就必须循环阅读inputChar,直到你得到一个\n

for(;;){
    scanf("%c", &inputChar);
    if(inputChar!='\n' && inputChar!='\r') break;
}

相关问题