2016-06-23 7 views
-1

後にクエスチョンマークの印刷「?りんご」
がここに私のコードです:すべての
はとてもとして疑問符を印刷する方法を把握しようとループ

#include<stdio.h> 
int main() 
{ 
    char a[23]; 
    int i=0; 
    printf("enter a single english word: "); 
    while((a[i++]=getchar()) != '\n' && i < 23){ 
     a[i] = '\0'; 
     i = 0; 
    } 
    while(a[i] != '\0'){ 
     printf("%c",a[i++]); 
    } 
    printf("?"); 
    return 0; 
} 
+2

あなたは私をリセットしています。どうして? – engineer14

+1

は、私は彼がループの後に行われたことをやるためのものと思います。 – Barmar

答えて

1

まず、あなたの入力ループが正しくありません。あなたの質問へのコメントは、したがって、配列の文字0を毎回読んで、各文字が読み込まれた後、あなたは、ポインタインデックスをリセットされ、上記言うよう

while((a[i++]=getchar()) != '\n' && i < 23) {} 
a[i] = '\0'; 

:それはそうのようにする必要があります。ループの後でこれを行う必要があります。

aは単なる文字列であるため、また、あなたが(ループなし)ちょうどこのようにそれを印刷することができる必要があります:

printf("%s?", a); 

最終的なプログラム:

#include<stdio.h> 
int main() 
{ 
    char a[23]; 
    int i=0; 
    printf("enter a single english word: "); 
    while((a[i++]=getchar()) != '\n' && i < 23) {} 
    a[i] = '\0'; 
    printf("%s?",a); 
    return 0; 
} 
2

あなたは各文字の読み込み後にiをリセットしています。それは事実上、保存されているものを消去します。あなたはそれの後に最初のwhileループ内からi = 0;を移動する必要があります。

2

ループが行われた後、あなたが最初のwhileループ内に持っているコードを実行する必要があります。ループのすべての作業をwhile()ヘッダーで行います。ループ本体はバック0に毎回iをリセットしたので、あなたが繰り返しaの最初の文字を上書きしました。

while((a[i++]=getchar()) != '\n' && i < 23){ 
} 
a[i] = '\0'; 
i = 0; 
1

follwoingロジックは動作します:

for(a[i]=getchar(); (a[i]!='\n') && (i<23) ; i++) 
     ; 

そして最後に印刷:

for(j=0;j<i;j++) 
     putchar(a[j]); 
したがって

プログラム:

char a[23]; 
int i=0,j=0; 
printf("enter a single english word: "); 

は、アレイへの入力をスキャンするには

それぞれが読んだ後
#include<stdio.h> 

int main() 
{ 
    char a[23]; 
    int i=0,j=0; 
    printf("enter a single english word: "); 

    for(a[i]=getchar(); (a[i]!='\n') && (i<23) ; i++) 
     ; 

    for(j=0;j<i;j++) 
     putchar(a[j]); 

    printf("?"); 
    return 0; 
} 
関連する問題