我遇到了这个我无法克服的简单问题。
int B;
char *a = (char*)malloc(1000*sizeof(char);
scanf("%[^\n]s", a);
printf("%c\n", a[0]);
B = strlen(a);
printf("%d\n", B);
如果我输入的内容如下:
" abc "
a [0] ='a'且B = 5(“abc”加上最后两个空格)。我想计算前三个空格,我该怎么做?
答案 0 :(得分:2)
您可以使用fgets()
而不是使用scanf()
来阅读整行,这通常会跳过空白,除非您明确捕获它。
int B;
char *a = malloc(1000 * sizeof*a); /* don't cast malloc */
if (fgets(a, 1000, stdin) == NULL) {
fputs("Could not read input\n", stdout);
}
else {
printf("%c\n", a[0]);
B = strlen(a);
printf("%d\n", B);
}
答案 1 :(得分:0)
如果您想修剪前导空格,可以试试这个:
void trim_left(char *p);
int main()
{
int B;
char *a = (char*)malloc(1000*sizeof(char));
scanf("%[^\n]s", a);
printf("%c\n", a[0]);
trim_left(a);
B = strlen(a);
printf("%d\n", B);
printf("a = %s\n", a);
return 0;
}
void trim_left(char *p) {
int i = 0;
while (p[i] && isspace(p[i])) {
i++;
}
memmove(p, p+i, strlen(p+i));
p[strlen(p+i)] = '\0';
}