danzzzz 2017-02-16 11:57 采纳率: 0%
浏览 1664

while(gets(choice) != NULL && choice[0] != '\0')求教

今天看了一下枚举,但是这一句代码我看不懂,不知道为什么敲了个回车就可以结束循环了。希望各位可以帮我解答一下这个疑问。代码我是在C PRIMER PLUS上看到的
#include

#include

#include

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 [LEN];

enum spectrum color;

bool color_is_found = false;

puts("Enter a color (empty line to quit):");  

while (gets(choice) != NULL && choice[0] != '\0')
{  
    for (color = red; color <= violet; color++)
        {  
            if (strcmp(choice , colors[color]) == 0)  
                {  
                    color_is_found = true;  
                    break;  
                }  

        }  

        if (color_is_found)
            switch (color)  
            {  
                case red: puts("Roses are red.");  
                        break;  
                case orange: puts("Poppies are orange.");  
                    break;                                        
                case yellow: puts("Sunflowers are yellow.");  
                    break;  
                case green: puts("Grass are green.");  
                    break;  
                case blue: puts("Bluebells are blue.");  
                    break;                    
                case violet: puts("Violets are violet.")  
                    break;                    
            }  

        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("Bye!");  

return 0;
  • 写回答

2条回答 默认 最新

  • li1322720362 2017-02-16 13:22
    关注

    此句的代码的意思是,在没有输入空行的情况下(字符串首字符是‘\0‘则已经是空行)读取输入的整行字符串(choice字符串),包含空格。当输入回车时,程序读入的即为一个空行,空行是循环的停止条件。程序存在一点小问题,在switch的最后一个case语句没加分号,另外在dev c++中,color++貌似不能正常编译,需要强制类型转换,即color=(spectrum)(color+1),具体原因百度上应该就可以找到。个人观点,如有错误还望指正,祝好~

    评论

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大