2017-02-18 4 views
0

私は先験的な有界長の文字列を食べるCプログラムを書こうとしている。入力は小文字で構成されていると仮定します。文字列がパリンドロムかどうかをチェックする - 私はプログラムをコンパイルするときにシャットダウンする

これはプログラミングの最初のコースの一部なので、私は経験がありません。

これは私の試みです。 CodeBlocksでビルド/実行しようとすると、プログラムはシャットダウンします。私はかなりうまくいったと思ったので残念です。

#include <stdio.h> 
 
#define MaxLength 50 
 

 
int palindrome(char *a,int size) /* checks if palindrome or not */ 
 
{ 
 
    int c=0; 
 
    for(int i=0;i<size/2;i++) /* for every spot up to the middle */ 
 
     { 
 
      if (*(a+i)!=*(a+size-i-1)) /* the palindrome symmetry condition */ 
 
      { 
 
       c++; 
 
      } 
 
     } 
 

 
    if (c==0) 
 
    { 
 
     return 1; /*is palindrome*/ 
 
    } 
 
    else 
 
     return 0; /*is not palindrome*/ 
 
} 
 

 
int main() 
 
{ 
 
char A[MaxLength]; /*array to contain the string*/ 
 
char *a=&A[0]; /*pointer to the array*/ 
 
int i=0; /*will count the length of the string*/ 
 
int temp; 
 
    while ((temp=getchar())!='\n' && temp != EOF) /*loop to read input into the array*/ 
 
    { 
 
     A[i]=temp; 
 
     i++; 
 
    } 
 
if (palindrome(a,i)==1) 
 
    printf("1"); 
 
else 
 
    printf("0"); 
 
return 0; 
 
}

備考。私は今寝るつもりだから、数時間は反応しません。

+1

コードはコンパイルされません。 –

答えて

2

あなたのアプローチは、okです。まず、#define MaxLength=50#define MaxLength 50(置換するテキスト、スペース、その置換え)にする必要があります。

int palindrome(char *a,int size); 

を...またはちょうどmain()上全体palindrome()機能を移動:

またmain()前に、あなたのpalindrome()関数のプロトタイプを提供する必要があります。プロトタイプまたは実際の関数定義のいずれかが、関数の呼び出しが行われる前に表示されます。

次の問題は、入力文字列の最後にヌル文字を探していることです。 Cの文字列は通常nullで終了しますが、コンソールから来る行はありません(文字列を終了するときにターミネータがプログラムによって追加された場合) - おそらく改行がないか、エラーの場合も同様です)。あなたがmain()であなたの結果を印刷するときので、代わりに

while ((temp=getchar())!='\0') 

while ((temp=getchar())!='\n' && temp != EOF) 

を試してみてください、あなたは例えば、最後に改行を持っている必要があります。 printf("1");の代わりにprintf("1\n");を使用して、出力バッファを確実にフラッシュして出力を確認し、出力ラインを終了させることができます。

palindrome()機能では、forループのsytaxが間違っています.3つの部分はセミコロンで区切り、コンマではありません。だから、変更:

for(int i=0,i<size/2,i++) 

...へ:

for(int i=0; i<size/2; i++) 

また、削除するループ本体のための余分な閉じ括弧を持っています。あなたが空白で、 `=`の#defineのMaxLength = 50` `でを置き換える必要があるため、すべてのことを固定した後、動作しているようです

...

+0

ありがとうございます。あなたが 'printf'について書いたことは別として、私はすべてを編集して編集を投稿しましたが、CodeBlocksはすぐに終了します。 – Arrow

+0

もっと基本的なコードを実行しようとしました。プログラムが実行され、すぐに000が返されます。コードは完全に無視されます。なぜこれが何であるかお考えですか?私が実行したコードは、最初の例[here](https://www.tutorialspoint.com/c_standard_library/c_function_getchar.htm)からです。入力を待つことさえありません。 – Arrow

+0

@Arrowプロジェクトのオプションを「ビルドターゲット」で確認し、「タイプ」がコンソールアプリケーションであり、使用するターゲットに対して「実行終了時に一時停止」が有効になっていることを確認します。 – Dmitri

2

このディレクティブ

#define MaxLength=50 

無効です。 Altキーとテンキーを使用して、直接バッファにゼロを配置し、あなたが持っている本来のループを使用する場合はそれ以外の場合は

#define MaxLength 50 

変更

int temp; 
^^^ 
while (i < MaxLength && (temp = getchar())!= EOF && temp != '\n') 
{ 
    A[i] = temp; 
    i++; 
} 

メイン、次のようにループがあるはずです。あなたは小さなエラーの数を持っているものの

機能自体が書き込むことができるシンプルな

int palindrome(const char *a, int size) /* checks if palindrome or not */ 
{ 
    int i = 0; 

    while (i < size/2 && *(a + i) == *(a + size - i - 1)) ++i;   { 

    return i == size/2; 
} 
+0

プログラムは実行しようとするとすぐにシャットダウンします。 – Arrow

+0

@Arrowプログラムの最後の文の前にscanf( "%c"、&temp); –

+0

実行しようとするとすぐにコードブロックがシャットダウンします。 – Arrow

関連する問題