2016-10-13 19 views
0

我需要編寫一個程序,讓用戶輸入一個字符串,然後繼續檢查單個字符與islowerisupper, isdigit,但是在字符串的第一個循環中,它總是崩潰並在第二回合後一次給出printfswhile()循環讓程序崩潰,但沒有語法錯誤或其他任何東西

有人可以幫忙嗎?

#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

因爲我們都具有神奇力量的玻璃球體,可以閱讀你的代碼,你的避風港沒有呈現給我們。編輯你的問題並添加你的代碼。 –

+0

對不起,我發送它不知道它 – Fenraehl

+0

'#ifndef MAIN_H_' < - 包括警衛通常在頭文件中,而不是包含它的文件 –

回答

0

的問題是,%c格式說明抑制的前導空格字符跳躍。在讀取數字後的下一個迭代中讀取新行(當用戶按輸入時)。

從手冊頁:

匹配,其長度由最大場寬度(缺省爲1)指定的字符序列;下一個指針必須是指向char的指針,並且所有字符都必須有足夠的空間(不添加終止空字節)。領先的白色空間通常會被忽略。要首先跳過空格,請在格式中使用明確的空格。

所以剛纔前面加一個空格:

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

另外請注意,您可以輕鬆地用零填充內存memset。與此

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

:所以,你可以更換該

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

,甚至這樣的:

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

好的,謝謝你現在的作品 – Fenraehl