在for循环中使用switch语句重复

在for循环中使用switch语句重复,c,for-loop,switch-statement,cs50,C,For Loop,Switch Statement,Cs50,我试着用一个循环打印出一首重复的歌,“这个老人” 第一节是: 这个老人,他演了一个 他在我的拇指上玩小摆设 这位老人滚回家来了 这首歌重复十次,两个词用斜体字表示 一->二++和拇指->另一项,如鞋、膝盖等。 以下是我目前的代码: #include <cs50.h> #include <stdio.h> #include <string.h> string change1 (int i); int main (void) { for (int i

我试着用一个循环打印出一首重复的歌,“这个老人” 第一节是: 这个老人,他演了一个 他在我的拇指上玩小摆设 这位老人滚回家来了

这首歌重复十次,两个词用斜体字表示 一->二++和拇指->另一项,如鞋、膝盖等。 以下是我目前的代码:

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

string change1 (int i);
int main (void)
{ 
    for (int i = 1; ; 1 < 11; i++)
    {
        printf ("This old man, he played "); 
        change1(i);
        printf("He played knick-knack on my %s\n\n", s1);
    }

    return 0;
 }

string change1(int i)
{
    string s1;

    switch(i)
    {
        case 1: 
        {
            printf("one\n");
            s1 = "thumb";
        }
            break;
        case 2:
        {
            printf("two\n");
            s1 = "shoe";
        }
            break;
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
        case 11:
            printf("ill add these cases later");
    }
}
#包括
#包括
#包括
字符串更改1(int i);
内部主(空)
{ 
对于(int i=1;1<11;i++)
{
printf(“这位老人,他扮演”);
变更1(i);
printf(“他在我的%s\n\n”s1上玩小摆设);
}
返回0;
}
字符串更改1(int i)
{
字符串s1;
开关(一)
{
案例1:
{
printf(“一个\n”);
s1=“拇指”;
}
打破
案例2:
{
printf(“两个”);
s1=“鞋”;
}
打破
案例3:
案例4:
案例5:
案例6:
案例7:
案例8:
案例9:
案例10:
案例11:
printf(“我稍后再添加这些案例”);
}
}
这给了我一条错误消息:“控制到达非无效函数的末尾”

我还得到了一个未声明的变量s1错误,但我在函数中声明了它。

change1
需要返回它决定的字符串。而
main
必须将返回值分配给一个变量,因为最初编写的
s1
change1
函数的局部变量

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

string change1 (int i);
int main (void)
{ 
    for (int i = 1; ; 1 < 11; i++)
        {
            printf ("This old man, he played ");
            string s1 = change1(i);
            printf("He played knick-knack on my %s\n\n", s1);
        }
    return 0;
}

string change1 (int i)
{
    string s1;

    switch (i)
        {
        case 1: 
            {
                printf("one\n");
                s1 = "thumb";
            }
            break;
        case 2:
            {
                printf("two\n");
                s1 = "shoe";
            }
            break;
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
        case 11:
            printf("ill add these cases later");
        }
    return s1;
}
#包括
#包括
#包括
字符串更改1(int i);
内部主(空)
{ 
对于(int i=1;1<11;i++)
{
printf(“这位老人,他扮演”);
字符串s1=change1(i);
printf(“他在我的%s\n\n”s1上玩小摆设);
}
返回0;
}
字符串更改1(int i)
{
字符串s1;
开关(一)
{
案例1:
{
printf(“一个\n”);
s1=“拇指”;
}
打破
案例2:
{
printf(“两个”);
s1=“鞋”;
}
打破
案例3:
案例4:
案例5:
案例6:
案例7:
案例8:
案例9:
案例10:
案例11:
printf(“我稍后再添加这些案例”);
}
返回s1;
}

change1
需要返回它决定的字符串。而
main
必须将返回值分配给一个变量,因为最初编写的
s1
change1
函数的局部变量

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

string change1 (int i);
int main (void)
{ 
    for (int i = 1; ; 1 < 11; i++)
        {
            printf ("This old man, he played ");
            string s1 = change1(i);
            printf("He played knick-knack on my %s\n\n", s1);
        }
    return 0;
}

string change1 (int i)
{
    string s1;

    switch (i)
        {
        case 1: 
            {
                printf("one\n");
                s1 = "thumb";
            }
            break;
        case 2:
            {
                printf("two\n");
                s1 = "shoe";
            }
            break;
        case 3:
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
        case 9:
        case 10:
        case 11:
            printf("ill add these cases later");
        }
    return s1;
}
#包括
#包括
#包括
字符串更改1(int i);
内部主(空)
{ 
对于(int i=1;1<11;i++)
{
printf(“这位老人,他扮演”);
字符串s1=change1(i);
printf(“他在我的%s\n\n”s1上玩小摆设);
}
返回0;
}
字符串更改1(int i)
{
字符串s1;
开关(一)
{
案例1:
{
printf(“一个\n”);
s1=“拇指”;
}
打破
案例2:
{
printf(“两个”);
s1=“鞋”;
}
打破
案例3:
案例4:
案例5:
案例6:
案例7:
案例8:
案例9:
案例10:
案例11:
printf(“我稍后再添加这些案例”);
}
返回s1;
}

在switch类末尾使用return语句

return s1;

在switch类的末尾使用return语句

return s1;
<>在C++变量中有范围。变量通常在声明它的大括号内可见;在这些括号外,变量不存在

这就是为什么您不能在循环中使用
change1
中的
s1
:您需要返回一个值(在您的情况下是最佳选择),或者使用
change1
main
中范围内的变量

printf ("This old man, he played ");
printf("He played knick-knack on my %s\n\n", change1(i));
...
string change1 (int i) {
    string s1;
    switch (i) {
        ...
    }
    return s1;
}
请注意,您不需要switch语句来实现
change1
:当代码如此统一时,最好使用数组:

const char *strings[] = {"thumb", "shoe", ...};
<>在C++变量中有范围。变量通常在声明它的大括号内可见;在这些括号外,变量不存在

这就是为什么您不能在循环中使用
change1
中的
s1
:您需要返回一个值(在您的情况下是最佳选择),或者使用
change1
main
中范围内的变量

printf ("This old man, he played ");
printf("He played knick-knack on my %s\n\n", change1(i));
...
string change1 (int i) {
    string s1;
    switch (i) {
        ...
    }
    return s1;
}
请注意,您不需要switch语句来实现
change1
:当代码如此统一时,最好使用数组:

const char *strings[] = {"thumb", "shoe", ...};

您可以将程序简化为实际的C程序,而不是C++

int main (void)
{
    int i;
    char* items[] = {"thumb", "shoe", "", "", "", "", "", "", "", ""};
    char* numbers[] = {"one", "two", "three","four","five","six","seven","eight","nine","ten"};
    for (i = 0; i < 10; i++)
    {
        printf ("This old man, he played %s\n", numbers[i]);    
        printf("He played knick-knack on my %s\n\n", items[i]);
    }
  return 0
}
int main(无效)
{
int i;
字符*项[]={“拇指”、“鞋子”、“拇指”、“鞋子”、“拇指”、“鞋子”、“鞋子”、“拇指”、“鞋子”、“鞋子”、“鞋子”、“鞋子”、“鞋子”、“鞋子”};
字符*数字[]={“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”};
对于(i=0;i<10;i++)
{
printf(“这位老人,他扮演%s\n”,数字[i]);
printf(“他在我的%s上玩小摆设\n\n”,items[i]);
}
返回0
}

您可以将程序简化为实际的C程序,而不是C程序++

int main (void)
{
    int i;
    char* items[] = {"thumb", "shoe", "", "", "", "", "", "", "", ""};
    char* numbers[] = {"one", "two", "three","four","five","six","seven","eight","nine","ten"};
    for (i = 0; i < 10; i++)
    {
        printf ("This old man, he played %s\n", numbers[i]);    
        printf("He played knick-knack on my %s\n\n", items[i]);
    }
  return 0
}
int main(无效)
{
int i;
字符*项[]={“拇指”、“鞋子”、“拇指”、“鞋子”、“拇指”、“鞋子”、“鞋子”、“拇指”、“鞋子”、“鞋子”、“鞋子”、“鞋子”、“鞋子”、“鞋子”};
字符*数字[]={“一”、“二”、“三”、“四”、“五”、“六”、“七”、“八”、“九”、“十”};
对于(i=0;i<10;i++)
{
printf(“这位老人,他扮演%s\n”,数字[i]);
printf(“他在我的%s上玩小摆设\n\n”,items[i]);
}
返回0
}

change1()的末尾没有返回(
change1
声明为返回字符串,但它没有执行此操作的
return
语句。而且您的
main
函数从不声明或分配
s1
。您的for循环有点像给定的那样扭曲,它没有与i进行比较,并且有一个额外的;一去不返