Sa。。 发表于 2018-9-18 14:35:04

C PrimerPlus上例题求助!!!不会悬赏,求顺便告知怎么悬赏!!!

本帖最后由 Sa。。 于 2018-9-18 14:40 编辑

#include <stdio.h>
#include <string.h>//为了使用strcmp()
#include <stdbool.h>
#include <Windows.h>

enum spectrum{red, orange, yellow, green, blue, violet};
const char * colors[] = { "red", "orange", "yellow", "green", "blue", "violet" };

#define LEN 30

int main(void)
{
        char choice;
        enum spectrum color;
        bool color_is_found = false;

        puts("Enter a color (empty line to quit)");
        while (gets(choice) != NULL && choice != '\0');
        {
                for (color = red; color <= violet; color++)
                {
                        if (strcmp(choice, colors) == 0)
                        {
                                color_is_found = true;
                                break;
                        }
                }
                if (color_is_found)
                        switch (color)
                        {
                        case red:puts("Rose are red");
                                break;
                        case orange: puts("Poppies are orange.");
                                break;
                        case yellow: puts("Sunflowers are yellow.");
                                break;
                        case green: puts("Grass is green.");
                                break;
                        case blue: puts("Bluebells are blue.");
                                break;
                        case violet: puts("Violets are violet.");
                        }
                else
                        printf("I don't know about the color %s\n", choice);
                color_is_found = false;
                puts("Next color, please (empty line to quit): ");
        }
        puts("Good bye!");

        system("pause");
        return 0;
}

这是C Primer Plus上的一段代码,gets()输入回车以后应该终止读取,但我这个程序没有,不知道怎么回事。如图,要按两次回车才停止读取!

claws0n 发表于 2018-9-18 15:00:43

第几版的?第几页?标准输入缓冲区的问题吧。
悬赏的话在发帖的时候,左上方的菜单里选。

Sa。。 发表于 2018-9-18 15:05:18

claws0n 发表于 2018-9-18 15:00
第几版的?第几页?标准输入缓冲区的问题吧。
悬赏的话在发帖的时候,左上方的菜单里选。

第五版409页,枚举值那里

claws0n 发表于 2018-9-18 15:24:33

Sa。。 发表于 2018-9-18 15:05
第五版409页,枚举值那里

我的是 6 版,内容应该一样,他是自己定义了一个 s_gets() 的函数吧? gets() 需要遇到 newline 回车的意思,或者 eof 才算读取完毕。
你的程序也算失败吧?进入不了 switch

claws0n 发表于 2018-9-18 16:43:26

哈哈哈,我看到你的问题了, while() 后面不可有冒号,你需要多一次回车是因为重新要求输入了

Sa。。 发表于 2018-9-18 17:13:45

claws0n 发表于 2018-9-18 16:43
哈哈哈,我看到你的问题了, while() 后面不可有冒号,你需要多一次回车是因为重新要求输入了

哦哦哦谢谢谢谢,没注意哈哈
页: [1]
查看完整版本: C PrimerPlus上例题求助!!!不会悬赏,求顺便告知怎么悬赏!!!