2016-09-26 85 views
-1

简单的for循环我写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()中有相同的循环,它的工作很好。 有人可以解释我的问题吗? 谢谢!

函数的恒等式完全:

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

旁注:用布尔结果与'1'或者'0'不要比较功能! '如果(!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

你不需要第二个INT

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

改用

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

“你不需要” - 它实际上是非法的,不只是可选的。 – Olaf