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;
}
答
gets前加一句
fflush(stdin);
scanf输入的回车被gets接受了,导致gets提前结束
答
问题是在你gets这一行前面有scanf输入,scanf输入会以回车结束,但回车会被gets(str)接收到,从而认为字符串输入结束,等于字符串只接收到一个回车符
你在gets(str)前增加getchar();就可以了,把scanf输入的回车符消化掉就好了
scanf("%d %c", &N, &ch);
getchar();
gets(str);