2017-05-20 7 views
3

質問:私のコードでは、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]); 
    } 
} 
+1

一度に1文字ずつEnterキーを押すのではなく、連続して入力してください。 – BLUEPIXY

+3

覚えておいてください:( ''\ n''')も文字です! –

答えて

2

QUES:あなたは動的にメモリを割り当てたので、

はまた、このように、あなたのmain()の終わりにfree()にそれを忘れないでください。コンパイラでは、配列サイズの半分しか入力できません。なぜですか?問題の

理由:

scanf("%c",&c[i])   //Here %c takes enter key also as a part of input which reduces the input size to half. 

だから、あなたの問題への解決策2主にあります:

ソル。 1 =>空白を含めるだけで、残りのコードは同じになります。

scanf(" %c",c[i]) //use whitespace before %c

ソル。 2 =>一度に1文字を入力しないでください。一括入力として入力してからenterを押してください。

+0

@ankitあなたの答えがあなたのために働いていることがわかっているなら、あなたの問題を理解するのにもってこいです。そうすれば、そのコミュニティはこの問題の解決策を知っているはずです:) –

関連する問題