首页
社区
课程
招聘
[求助]白到不能再白的问题了,For循环
发表于: 2010-8-14 15:09 8362

[求助]白到不能再白的问题了,For循环

2010-8-14 15:09
8362
最近想学点C语言的反汇编,所以坚持后缀都用.c,
结果发现自己不会用For循环,报错,抱得一塌糊涂。
#include <stdio.h>
int main()
{
        for(int i=0;i<8;i++)
        {
                printf("Hello For\n");
        }
        return 0;
}
一段这样的代码怎么也编译怎么也报错。而且一长串。
#include <stdio.h>
int main()
{
        int i;
        for(i=0;i<8;i++)
        {
                printf("Hello For\n");
        }
        return 0;
}
改成这样就能过了。

而且第一种后缀改成.cpp又能过。
这是怎么回事。
VC6和VC2008编译都报错,
D:\VC6\MyProjects\demo001\main.c(5) : error C2143: syntax error : missing ';' before 'type'
D:\VC6\MyProjects\demo001\main.c(5) : error C2143: syntax error : missing ';' before 'type'
D:\VC6\MyProjects\demo001\main.c(5) : error C2143: syntax error : missing ')' before 'type'
D:\VC6\MyProjects\demo001\main.c(5) : error C2143: syntax error : missing ';' before 'type'
D:\VC6\MyProjects\demo001\main.c(5) : error C2065: 'i' : undeclared identifier
D:\VC6\MyProjects\demo001\main.c(5) : warning C4552: '<' : operator has no effect; expected operator with side-effect
D:\VC6\MyProjects\demo001\main.c(5) : error C2059: syntax error : ')'
D:\VC6\MyProjects\demo001\main.c(6) : error C2143: syntax error : missing ';' before '{'

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 37
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
C语言变量事先声明再使用
C++想用的时候在声明即可
区别在此
2010-8-14 15:19
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先,感谢楼上的作答,
按照楼上提示我试验了以下代码
#include <stdio.h>
int main()
{
        int i = 10;
        int j = 20;
        int c = i + j;
        printf("%d\n",c);
        return 0;
}
可是也是可以编译通过的啊!
#include <stdio.h>
int main()
{
        int i = 10;
        int j = 20;
       
        printf("%d\n",int c = i + j);
        return 0;
}
改成这样不论是C还是C++都编译通不过,其实也是废话,我从来没看见过这样的形式。
#include <stdio.h>
int main()
{
        int i = 10;
        int j = 20;
        int c;
        printf("%d\n", c = i + j);
        return 0;
}
改成这样又都同得过了。我快傻了。

更重要的是我看见C语言的书上,我的第一种形式都没有错。
2010-8-14 15:41
0
雪    币: 98
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whw
4
你要是还不会的话,查查书上说的,第一,C语言中的声明。第二,C语言中的最基本的输出函数:printf()的使用方法。
2010-8-14 17:11
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼上,我水平没有菜到那个地步吧。
只是一直是使用.cpp后缀,也就是C++编译器,
发现在.cpp后缀很容易编译通过的东西,在.c后缀下却完全通不过,
而且更重要的是我的代码是完全符合C99标准的,我也专门翻了下c primer plus 第五版,在那上面我的代码也是没有任何问题的,看样子,我确实还得去查查 C程序设计语言,也许是标准的问题,反正VS2010至今都还有很多C99标准不支持。
不过还是要感谢一下楼上的回帖。
2010-8-14 17:59
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
经鉴定,LZ已经菜刀那个地步了,只是自己还不知道
2010-8-14 18:18
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
翻了下《C程序设计语言》,大致确定应该是对标准支持问题。
在《C程序设计语言》中我没有看见例如for(int i=0;i<8;i++)这样的语句。
而只有int i; for(i=0;i<8;i++)这样的语法样式,
应该是老式C标准中,并不支持for的第一个参数为变量声明赋值语句。
而VC一直以来对新标准的支持都比较消极。
因为个人学习中从来没有注意这个问题,
把第一种形式定义为标准的完全正确的形式,
所以有这个问题,给大家带来不便,
谢谢回答问题的几位。
2010-8-14 18:28
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
呵呵,弄明白了,谢谢。
2010-8-14 18:28
0
雪    币: 37
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
.....你真的需要看看C语言关于PRINTF的参数
2010-8-14 19:56
0
雪    币: 386
活跃值: (46)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
C与C++还是有区别的
2010-8-14 20:25
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
虽然我问问题,你们回答,无论能不能解决问题,我的表示感谢,
可是有很多的人,连问题都不看,就教训别人,
未免也有点过吧。
我这问题跟printf一点关系都没有,
我再菜也不会到看雪来问printf。
2010-8-14 20:43
0
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
没学过C,直接来的C++,所以你那个错误我不是很清楚。
当时很想说标准的问题。呵呵。
2010-8-14 20:53
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
ansi c for里不支持声明变量
2010-8-15 09:57
0
雪    币: 282
活跃值: (358)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
14
在VC6环境下.添加
#include "stdafx.h"
不就可以了咩.唉
2010-8-15 16:41
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
15
一般我喜欢文件的后缀为cpp,但是却用C语法来写代码~~

临时变量可以在代码的中间声明,不然得每次拉动鼠标~~
2010-8-18 05:04
0
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
6L和9L明显没怎么写过C程序,哈哈,常写C++程序突然变到C程序就会感觉很不爽,看这种情况:
void foo()
{
       int a;
       //代码
     int i = 0;          //完了,这里会报错
     //代码
}
这点最让人很不爽,所有的变量声明或者初始化不能夹杂在代码中,我想lz肯定知道这一点,15L也提到了,那么for(int i = 0;...;...)岂不也是在代码中夹杂初始化操作么?所以原因并不是“老式C标准中,并不支持for的第一个参数为变量声明赋值语句。”

还有就是printf("%d\n",int c = i + j);这一句也是在代码中夹杂了初始化操作,而printf("%d\n",c = i + j);是正确的,因为这是赋值操作,不是初始化操作,不允许的只有声明和初始化两个操作,赋值是被允许的。

在看《C++ Primer》的时候有一句话我至今印象深刻,"It's essential to understand that initialization is not assignment",因为我初学C++时一直不能区分开初始化和赋值,哈哈。
2010-8-18 13:30
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
.C 程序在函数中用临时变量必须先声明。否则要加{ }

void func()
{
  int i=0;
  for(...){
  }
  ...
  ...
{
   int j=0;
   ...
}
}
其实和在c++中用 goto 语句一样
2010-8-19 16:47
0
雪    币: 263
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
在微软的编译器上,C要求变量的声明都要在函数的头部,否则报错
C++是需要时候就可以定义
2010-8-19 17:15
0
雪    币: 37
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
因为楼主 说了 printf("%d\n",int c = i + j);这一句也是在代码中夹杂了初始化操作
我才建议下看下PRINTF

楼主本身的问题之前已经说了  见2楼
所以我并不是看了问题直接回复进行嘲讽

至于说我没怎么写C程序 我只说7个字“是不是太幽默太搞笑”
2010-8-19 20:56
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
还是谢谢各位的回答,确实写惯了C++代码,写C不爽,
发现问题还挺多。
谢谢各位了。
只是太把书当标准了,呵呵。
谢谢。
2010-8-21 13:44
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
但是我发现什么叫做先声明再使用?
int a = b + c;
不是一边声明一边使用吗?
是可以通过编译的啊!
我终于全明白了,
试编译了一下16楼的,之后我全明白了,
二楼说的是我误会意思,
C语言是不是只可以在函数的开头进行变量的声明,
而不可以在函数中进行变量声明?
而且我在那本书上看到过,不过当时没在意。

因为楼主 说了 printf("%d\n",int c = i + j);这一句也是在代码中夹杂了初始化操作
我才建议下看下PRINTF
=========================
至于这句我自己知道是错的,我自己都说了,从来没用过。

谢谢。谢谢楼上各位。
2010-8-21 13:55
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
自己的问题,感谢各位,给各位带来不便了。
2010-8-21 14:00
0
游客
登录 | 注册 方可回帖
返回
//