1

我正在尝试使用循环打印出一首重复的歌曲,“这个老人”第一节是:这个老人,他演奏了一个他在我的拇指 上演奏了小玩意 这个老人滚滚回家

这首歌重复到十,改变两个术语斜体一个 -> 二++ 和拇指 -> 另一个项目,如鞋,膝盖等。这是我到目前为止的代码:

#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");
    }
}

这给了我一条错误消息:“控制到达非无效函数的结尾”


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

4

4 回答 4

2

您可以将程序简化为实际的 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
}
于 2013-12-10T03:40:17.333 回答
0

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;
}
于 2013-12-10T03:28:11.547 回答
0

在 C++ 中,变量有作用域。变量通常在声明它的花括号内可见;在这些括号之外,变量不存在。

这就是为什么你不能s1change1循环内部使用:你需要返回一个值(在你的情况下是最好的选择),或者使用一个在change1and范围内的变量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", ...};
于 2013-12-10T03:29:49.547 回答
-1

在 switch 类的末尾使用 return 语句

return s1;
于 2013-12-10T03:29:35.830 回答