我无法理解为什么整个" abcde"不是从我的代码打印出来的,你能帮忙吗?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int L,i,j;
char *p;
scanf("%d",&L);
p=(char *)malloc(L+1);
for(i=0;i<L;i++)
scanf("%c",p+i);
*(p+i)='\0';
for(j=0;j<L;j++)
printf("%c",*(p+j));
}
答案 0 :(得分:2)
在第二次输入读取字符串长度后,输入流中还会留下换行符,即将进行的scanf()
调用会读取该字符。因此,在逐个字符地读取字符串的内部循环之后,您实际上得到了这样的字符串:
{'\n', 'a', 'b', 'c', 'd', '\0'};
因此,您的打印声明完全相同:
printf("\nabcd");
您可以通过在scanf()
格式字符串之前插入空格来跳过空格:
for (j = 0; j < L; j++)
scanf(" %c", p+j);
// ^
通过这种方式,您可以获得所需的输出。