我正在尝试用一个循环打印出一首重复的歌曲,"这位老人" 第一节是: 这位老人,他打了一个 他在我的拇指上扮演了诀窍 这位老人来回家了
这首歌重复到十,用斜体改变两个词 一个 - >两个++和拇指 - >鞋子,膝盖等其他项目 到目前为止,这是我的代码:
#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");
}
}
这给了我一条错误信息:&#34;控制到达非空函数的结束&#34;
<小时/> 我还得到了一个未声明的变量s1错误,但我在函数中声明了它。
答案 0 :(得分: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
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
在C ++变量中有范围。变量通常在声明它的花括号内可见;在这些括号之外,变量不存在。
这就是为什么你不能在循环中使用来自s1
的{{1}}的原因:你需要返回一个值(在你的情况下最好的选择),或者使用{{1}范围内的变量change1
1}}和change1
。
main
请注意,您不需要使用switch语句来实现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;
}
:当代码如此统一时,您可能最好使用数组:
change1
答案 3 :(得分:-1)
在switch类的末尾使用return语句
return s1;