2016-10-13 11 views
0

プログラムを書く必要があります。プログラムを書く必要があります。文字列に入力してからislowerisupperisdigit、文字列の最初のループでは、それは常にクラッシュし、2回目の回転後に一度にprintfsに与えます。while()ループでプログラムがクラッシュする可能性がありますが、構文エラーなどはありません

誰か助けてもらえますか?

#include <stdio.h> 
#include <string.h> 
#ifndef MAIN_H_ 
#include "main.h" 
#endif 

int main() 
{ 
    char cString[MAX];  //alle Felder auf NULL gesetzt für spätere Überprüfung ob Entertaste gedrückt wurde 
    char cUebergabe[MAX]; 
    int iLauf=0; 
    int iNULL=0; 

    while(iLauf<MAX) 
    { 
     cString[iLauf]=iNULL; 
     iLauf++; 
    } 
    iLauf=0; 

    printf("geben sie maximal 20 Zahlen zur auswertung des String ein, bei der Eingabe von Enter ohne ein Symbol wird das Einlesen abgebrochen\n"); 

    while(iLauf<MAX) 
    { 
     printf("Geben Sie nun das %d . Zeichen ein\n",iLauf+1); 

     scanf("%c",&cString[iLauf]); 
     iLauf++; 

     if(cString[iLauf-1]==iNULL) 
     { 
      iLauf=MAX; 
     } 
     else 
      ; 
    } 
    strcpy(cUebergabe,cString); 

    VerarbeitungAusgabe(cUebergabe, iNULL); 

    return 0; 
} 
+3

memset(cString, 0, sizeof(cString)); 

かさえ、この:これで

while (iLauf < MAX) { cString[iLauf] = iNULL; iLauf++; } iLauf = 0; 

:だから、あなたはこれを置き換えることができます私たちに提示されていません。質問を編集してコードを追加してください。 –

+0

申し訳ありません私はそれを知らずに送ってきました – Fenraehl

+0

'#ifndef MAIN_H_' < - インクルードガードは通常、ヘッダーファイルにあり、それを含むファイルではありません –

答えて

0

問題は%c書式指定子が主要な空白文字のスキップを抑制することです。新しい行(ユーザーがを入力したときを入力したとき)は、番号が読み取られた後の次の繰り返しで読み込まれます。マニュアルページから

は長さ最大フィールド幅(デフォルトは1)で指定された文字のシーケンスに一致し、次のポインタはcharへのポインタでなければならず、すべての文字のための十分な空きがなければなりません(終端のヌルバイトは追加されません)。先頭の空白の通常のスキップは抑制されます。空白を最初にスキップするには、形式内の明示的なスペースを使用します。

だからスペースを付加:

scanf(" %c", &cString[iLauf]); 

も注意してください、あなたは簡単にmemsetとゼロでメモリを埋めることができます。我々はすべてのコードあなたの避難所を読み取ることができる魔法の力を持つガラスオーブを持っているので

char cString[MAX] = {0}; 
+0

okありがとうございます – Fenraehl

関連する問題