while循环中的switch语句

时间:2011-11-06 07:02:46

标签: c

我在控制结构的一个章节中,我把自己投入了一个案例挑战,但我似乎无法让它工作,任何抬头?我知道我的代码有点脏或很脏:D无论如何代码是关于要求用户输入颜色名称然后打印相应的颜色代码,之后它会询问您是否要继续,如果是,它会继续,如果不是它终止。

#include <stdio.h>


main ()
{
    char color[20];
    char answer;
    printf("Enter the color name: ");
    scanf("%s", &color);

    while (1) {
     switch("color")
     {
        case "red":
            printf("#FF0000\n");
            break;
        case "green":
            printf("#00FF00\n");
            break;
        default:
            printf("FFFFFF\n");
     }
     printf("Do you want to do that again(y/n): ");
     scanf("%c", &answer);
     if (answer == "y")
     {
         printf("Enter the color code: ");
         scanf("%s",&color);
     }
     else
     {
         printf("Quiting.......\n");
         break;
     }
     }
    return 0;
}

4 个答案:

答案 0 :(得分:1)

有一个以上的问题,但这里有一些:

你没有以正确的方式比较字符串。在C语言中,您无法使用==来比较字符串,您必须使用strcmp(或strncmp)。

您无法在C中打开字符串。因此,您可能希望将switch替换为if-else

if (!strcmp(color, "red"))
    /* ... */
else if (!strcmp(color, "green"))
    /* ... */
else
    /* "default" */

您正在混合使用不同的scanf策略:

  • scanf("%s",&color);在输入缓冲区中留下\n
  • scanf("%c", &answer);读取该换行符并将其存储在answer

基本上唯一的好建议是:继续学习。你还没准备好迎接这个“挑战”

答案 1 :(得分:0)

您的switch语句始终转到default:。这是因为您使用了"color"而不是变量color

你想要

switch(color) {

但正如其他人指出的那样,这也不会起作用,因为C开关不允许使用字符串。

答案 2 :(得分:0)

你想写:

switch (color)
{
...
}

但即使这样也行不通,因为你需要一个整数表达式; C本身不处理字符串比较。

所以,你要么必须将颜色字符串映射到整数,要么放弃switch并使用`if / else if / else'链:

if (strcmp(color, "red") == 0)
    printf("#FF0000\n");
else if (strcmp(color, "green") == 0)
    printf("#00FF00\n");
else
    printf("FFFFFF\n");

答案 3 :(得分:0)

要回答你的问题,你必须记住C中的字符串文字。

它们是字符数组的指针,编译器在代码中嵌入了字符串数据。

所以,首先,你的switch语句使用一个常量(&#34; color&#34; string的地址)作为控制变量。

其次,每个案例分支都包含一个无意义的字符串地址作为标签。

要模拟C中字符串的switch,您必须在条件中使用if - else ifstrcmp的序列。