2016-09-26 13 views
-1

я пишу functiton, что проверка строка содержит только буквы или нет, если я объявляю n вне цикла:.Ожидаемый идентификатор или «(» в простом для петли в C

int n = strlen(str); 
for (int i = 0; i < n; i++) 

это не имеет ошибок и отлично работает, но если я двигаю n объявление внутри:

for (int i = 0, int n = strlen(str); i < n; i++) 

у меня есть ошибки:

vigenere.c:71:21: error: expected identifier or '(' 
    for (int i = 0, int n = strlen(str); i < n; i++) 
        ^
vigenere.c:71:21: error: expected ';' in 'for' statement specifier 
vigenere.c:71:21: error: expected expression 
vigenere.c:71:46: error: use of undeclared identifier 'n' 
    for (int i = 0, int n = strlen(str); i < n; i++) 
              ^
vigenere.c:71:47: error: expected ')' 
    for (int i = 0, int n = strlen(str); i < n; i++) 
              ^
vigenere.c:71:9: note: to match this '(' 
    for (int i = 0, int n = strlen(str); i < n; i++) 
     ^
vigenere.c:71:49: error: use of undeclared identifier 'i' 
    for (int i = 0, int n = strlen(str); i < n; i++) 
               ^
6 errors generated. 

Почему? У меня такой же цикл в main(), и он отлично работает. Может ли кто-нибудь объяснить мне проблему? Спасибо!

Fuction полностью:

int is_alpha_string(string str) 
{ 
    //for (int i = 0, int n = strlen(str); i < n; i++) 
    int n = strlen(str); 
    for (int i = 0; i < n; i++) 
    { 
     if (isalpha(str[i]) == 0) 
     { 
      return 0; 
     } 
    } 

    return 1; 
} 
+1

Sidenote: Не сравнивайте функции с логическим результатом с '1' или' 0 '! 'if (! isalpha (..))' намного легче читать ('!' читает как «не»), просто произносите вслух оба выражения. – Olaf

+0

Вы попытались удалить второй 'int'? – Olaf

ответ

4

Изменение:

for (int i = 0, int n = strlen(str); i < n; i++) 

к:

for (int i = 0, n = strlen(str); i < n; i++) 

(Обратите внимание, что синтаксис здесь так же, как это было бы для любой декларации несколько переменных одного типа, независимо от того, находится ли он в цикле for или нет.)

+0

Спасибо! Я знал, что сделал что-то глупое. Я новичок в C, и я устал. Нужно спать :) – lebvlad

4

Вам не нужен второй ИНТ

for (int i = 0, **int** n = strlen(str); i < n; i++) 

использовать вместо

for (int i = 0, n = strlen(str); i < n; i++) 
+0

«Вам не нужно» - это фактически незаконно, а не просто необязательно. – Olaf

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

  • Нет связанных вопросов^_^