C语言例题编译错误

来源:百度知道 编辑:UC知道 时间:2024/09/24 12:30:44
程序如下,是直接从书上抄下来的编译却出错了,请问怎么回事?
#include"stdafx.h"
#include<stdio.h>
void main()
{
enum color {red,yellow,blue,white,black};
enum color i,j,k,pri;
int n,loop;
n=0;
for(i=red;i<=black;i++)
for(j=red;j<=black;j++)
if(i!=j)
{
for(k=red;k<=black;k++)
if((k!=i)&&(k!=j))
{
n=n+1;
printf("%-4d",n1);
for(loop=1;loop<=3;loop++)
{
switch(loop)
{
case 1:pri=i;break;
case 2:pri=j;break;
case 3:pri=k;break;
default:break;
}
switch(pri)
{
case red: printf("%-10s","red"); break;
case yellow: printf("%-10s","yellow");break;
case blue:printf("%-10s","blue"); break;
case white: printf("%-10s","whit

首先visual studio 是无法新建纯C环境项目的,但是可以编译C文件.

你只要把你的代码写好..保存在文本文件里..然后保存为扩展名为 .c的文件.

用visual studio 新建一个C++空项目,打开..然后编译即可..C和C++的IO语法都

不一样..用C++编译器编译C当然有问题了

抄了别人比较现成的解释在下面,差不多就是这意思,,,如果你抄的是书上的,那么可能需要检查一下书上的头文件stdafx.h是否重载了enum的++运算符,而你自己机器上的stdafx.h里可能没有定义过.嗯简单的说就是如果书没错,就是软件的版本问题了.

以下转载:
enum这种类型,运算时,会被隐式转换到int等类型,但是没有默认的int再回到enum的转换(除非你重载来自定义其行为,或者显式转换)。所以几乎没有针对enum类型本身的运算符,而是全被先转换了。转换后,就是赋值回来都不行,因为已经是整数了(除了直接把字面量赋给变量)。而++正是这种情况,因为它没法保证++后仍然是个合法的enum值,而编译器又不会在运行时去检查这种事,只好不允许了。

在我的编译器以下修改后可以运行:
1.去掉#include"stdafx.h"(因为我的编译器找不到这个头文件)
2.printf("%-4d",n1); 把这一行的n1改成n.你多写了一个1.

我的编译器是win-tc和VC6

提示错误是枚举类型没有定义++操作,我记得枚举是常量,你给常量++,当然报错了。你直接把ijk定义成int型,然后用enum赋值应该就好了