gets(str);被编译器忽略,导致错误

问题描述:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LENTH 10000
char leftpad(char* str, char ch,int N)
{
    int i,j;
    if (strlen(str) >= N)
        for (i = strlen(str) - N; *(str + i) != '\0'; ++i)
            printf("%c", *(str + i));
    else
    {
        for (i = 0; i < N - strlen(str); ++i)
            printf("%c", ch);
        for (j = i + 1; *(str + j - i-1) != '\0'; ++j)
            printf("%c", *(str + j - i-1));
    }
    return 0;
}
main()
{
    char str[LENTH];
    unsigned int N;
    char ch;
    scanf("%d %c", &N, &ch);
    gets(str);   //这一行没有被执行是怎么回事,可以下载下来看哪里出了问题。
    leftpad(str, ch,N);
    return 0;
}


img

img

gets前加一句
fflush(stdin);
scanf输入的回车被gets接受了,导致gets提前结束

问题是在你gets这一行前面有scanf输入,scanf输入会以回车结束,但回车会被gets(str)接收到,从而认为字符串输入结束,等于字符串只接收到一个回车符
你在gets(str)前增加getchar();就可以了,把scanf输入的回车符消化掉就好了

scanf("%d %c", &N, &ch);
getchar();
gets(str);