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
第几版的?第几页?标准输入缓冲区的问题吧。
悬赏的话在发帖的时候,左上方的菜单里选。
第五版409页,枚举值那里 Sa。。 发表于 2018-9-18 15:05
第五版409页,枚举值那里
我的是 6 版,内容应该一样,他是自己定义了一个 s_gets() 的函数吧? gets() 需要遇到 newline 回车的意思,或者 eof 才算读取完毕。
你的程序也算失败吧?进入不了 switch 哈哈哈,我看到你的问题了, while() 后面不可有冒号,你需要多一次回车是因为重新要求输入了 claws0n 发表于 2018-9-18 16:43
哈哈哈,我看到你的问题了, while() 后面不可有冒号,你需要多一次回车是因为重新要求输入了
哦哦哦谢谢谢谢,没注意哈哈
页:
[1]