2016-10-13 1 views
0

Мне нужно написать программу, которая позволяет пользователю вводить строку, а затем переходит к проверке одного символа с помощью islower, isupper, isdigit, но в первом цикле для строки он всегда сбой и дает printfs в момент после второго поворота.while() loop позволяет сбой программы, но нет синтаксических ошибок или чего-либо еще

Может ли кто-нибудь помочь, пожалуйста?

#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 спецификатор формата подавляет пропуск ведущих пробельных символов. И новая строка (когда пользователь нажимает Enter) читается на следующей итерации после считывания числа.

От человека странице:

соответствует последовательности символов, длина которых определяется максимальная ширина поля (по умолчанию 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

Смежные вопросы