问题:在我的代码中,我为n输入的内容,编译器只允许输入和输出一半。为什么呢?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;
scanf("%d\n",&n);
char *c= (char*)malloc((n+1)*sizeof(char));
c[n]='\0';
for(int i=0;i<n;i++)
{
scanf("%c",&c[i]);
}
for(int i=0;i<n;i++)
{
printf("%c",c[i]);
}
}
答案 0 :(得分:2)
改变这个:
constexpr
到此:
scanf("%c",&c[i]);
示例输出:
scanf(" %c",&c[i]);
我在Caution when reading char with scanf (C)中讨论了这个解决方案背后的原因。
PS:Do I cast the result of malloc?不!
此外,由于您动态分配了内存,因此请不要忘记Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
5
a
b
c
d
e
abcde
末尾的free(),如下所示:
main()
答案 1 :(得分:1)
问题。编译器允许您只输入数组大小的一半,为什么?
问题原因:
scanf("%c",&c[i]) //Here %c takes enter key also as a part of input which reduces the input size to half.
因此,您的问题主要有两个解决方案:
<强>溶胶。 1 =&gt;你只需要包含空格,其余的代码也一样。
scanf(" %c",c[i]) //use whitespace before %c
<强>溶胶。 2 =&gt;不要一次输入一个字符,请立即输入整个输入,然后按回车键。