2016-09-01 3 views
1

入力された文字列を受け取り、逆の場合に文字列を出力するプログラムを作成しようとしています。例えば、大文字を小文字に、逆もまた同様である。残念ながら、私が出力として得ているのは、その周りに正方形がある疑問符です。スイッチング用文字C

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 


int main(int argc, char *argv[]) { 
char sentence[200], ch; 
    int x=0; 
    int count =0; 
    char oppo[200]; 
printf("Type something\n"); 
    while(ch != '\n'){ 
     scanf("%c", &ch); 
     sentence[x] = ch; 

     x++; 
    } 

x=0; 

printf("\n"); 
for(count=0;sentence[count]=='\0';count++){ 
    if(islower(sentence[count])==0){ 
     oppo[count]=tolower(sentence[count]); 
    } 
    else 
    { 
     oppo[count]=toupper(sentence[count]);  
    } 

} 
x=0; 
while(oppo[x]!='\0'){ 
    printf("%c",oppo[x]); 
    x++; 
} 
return 0; 
} 
+0

基本的なデバッグ手法:プログラムの実行をトレースするには、デバッガおよび/またはデバッグのprint文を使用します。 – kaylum

+0

'sentence [count] == '\ 0'' - >'文[count]!=' \ n''です。つまり、条件演算子が間違っていて、とにかくNUL文字を格納していないということです。 – kaylum

+0

'while(ch!= '\ n')' ... 'ch'は初期化されていないため、最初のループにランダムな値があるため、未定義の動作が呼び出されます。 – kaylum

答えて

0

あなたはそれを読んだ後sentence'\0'を追加しないでください。したがって、sentence[count]=='\0'のチェックが満たされず、バッファーがオーバーランします。

実際にforループ内の条件は、あなたが文字列ではなく文字で文字を読んを読むために%sscanf()を使用して試すことができます

for(count=0; sentence[count] !='\0'; count++){ 
.... 
} 

でなければなりません。