声明列表中的多个类型说明符

phi*_*dex 4 c for-loop declaration cs50

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main(void)
{
    //ask user for input
    string s = get_string();

    //make sure get_string() returned a string
    if(s != NULL)
    {
        //iterate over the characters one at a time
        for(int i = 0, int n = strlen(s); i < n; i++)
        {
            //print i'th character in s
            printf("%c\n", s[i]);
        }
    }
    else
    {
        //tell the user that their input is not a string
        printf("Sorry, no good\n");
    }

}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨这一行:

for(int i = 0, int n = strlen(s); i < n; i++)
Run Code Online (Sandbox Code Playgroud)

因为我声明了整数nint定义的类型.

该程序编译得很好:

for(int i = 0, n = strlen(s); i < n; i++)
Run Code Online (Sandbox Code Playgroud)

为什么int需要/良好的形式i,但n在这个例子中不是?

Ste*_*eve 10

这是因为这一行:

int i = 0, n = strlen(s)
Run Code Online (Sandbox Code Playgroud)

创建两个整数叫in和初始化它们.

当你把:

int i = 0, int n = strlen(s)
Run Code Online (Sandbox Code Playgroud)

你创建一个调用i并初始化它的int ,然后你尝试创建另一个int n没有意义的int .

没有理由初始化n它 - 毕竟它不应该改变.在循环之前初始化它:

int n = strlen(s); 

for(int i = 0; i < n; i++)
{
    ...
Run Code Online (Sandbox Code Playgroud)