在元素

时间:2017-05-20 09:40:35

标签: c string loops io scanf

问题:在我的代码中,我为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]);
    }
}

2 个答案:

答案 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;不要一次输入一个字符,请立即输入整个输入,然后按回车键。