while(scanf("%d %d",&x,&y) != EOF)用不了

wx3046 2009-11-23 06:50:50
只有17分了,麻烦大家帮我看一下,这个程序还没写完。一运行就提示 按任意键退出了,没有阻塞,让我输入数据。这是为什么?



#include "stdio.h"
#define MAX 2000
#define MIN 2
#define N 10 //最多一次输入10组数据

void main()
{
int y[N], x[N];
int haveCell[MAX][MAX]; //网格
int i = 0, j = 0;
int counter = 0;
while (scanf("%d%d",&y[counter],&x[counter]) == 2)
{
for (i = 0; i < y[counter]; i++)
{
for (j = 0; j < x[counter]; j++)
{
scanf("%d", &haveCell[i][j]);
}
}
}
}
...全文
759 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wx3046 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mstlq 的回复:]
引用 12 楼 wx3046 的回复:
引用 11 楼 mstlq 的回复:
引用 8 楼 wx3046 的回复:
引用 3 楼 fanatic_egg 的回复:
1楼的估计LZ看不懂


那个对栈要求过大真看不懂。。。


  int haveCell[MAX][MAX];//这里试图在栈上分配16m的内存,一般来说,程序默认的栈大小是1m,程序到这里就已经挂了……


那为什么你把int haveCell[MAX][MAX];放到主函数外面就可以了呢,而且你还改MAX为3000了。
我调试的时候确实是提示栈溢出了

全局的东西在内存的另一个区域里,不在栈上……
局部变量才在栈上……
[/Quote]

明白了,呵呵,谢谢,也谢谢其他的朋友
wx3046 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 gogdizzy 的回复:]
因为全局变量是在全局内存中存放,而一般32位OS下一个程序自己都有2G的地址空间。
[/Quote]

哦。。照这么说的话我明白了

32位OS下应该是有4G的虚拟地址空间吧。。。
mstlq 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wx3046 的回复:]
引用 11 楼 mstlq 的回复:
引用 8 楼 wx3046 的回复:
引用 3 楼 fanatic_egg 的回复:
1楼的估计LZ看不懂


那个对栈要求过大真看不懂。。。


  int haveCell[MAX][MAX];//这里试图在栈上分配16m的内存,一般来说,程序默认的栈大小是1m,程序到这里就已经挂了……


那为什么你把int haveCell[MAX][MAX];放到主函数外面就可以了呢,而且你还改MAX为3000了。
我调试的时候确实是提示栈溢出了
[/Quote]
全局的东西在内存的另一个区域里,不在栈上……
局部变量才在栈上……
  • 打赏
  • 举报
回复
因为全局变量是在全局内存中存放,而一般32位OS下一个程序自己都有2G的地址空间。
wx3046 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mstlq 的回复:]
引用 8 楼 wx3046 的回复:
引用 3 楼 fanatic_egg 的回复:
1楼的估计LZ看不懂


那个对栈要求过大真看不懂。。。


  int haveCell[MAX][MAX];//这里试图在栈上分配16m的内存,一般来说,程序默认的栈大小是1m,程序到这里就已经挂了……
[/Quote]

那为什么你把int haveCell[MAX][MAX];放到主函数外面就可以了呢,而且你还改MAX为3000了。
我调试的时候确实是提示栈溢出了
mstlq 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wx3046 的回复:]
引用 3 楼 fanatic_egg 的回复:
1楼的估计LZ看不懂



那个对栈要求过大真看不懂。。。
[/Quote]

int haveCell[MAX][MAX];//这里试图在栈上分配16m的内存,一般来说,程序默认的栈大小是1m,程序到这里就已经挂了……
wx3046 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jernymy 的回复:]
#define  MAX 200 // MAX 2000

  int haveCell[MAX][MAX];  //网格

这样可以不?

[/Quote]

这样可以。。。不能申请太大的空间?
z569362161 2009-11-23
  • 打赏
  • 举报
回复
mstlq
的回答有问题
wx3046 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fanatic_egg 的回复:]
1楼的估计LZ看不懂
[/Quote]


那个对栈要求过大真看不懂。。。
wx3046 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
逻辑有问题+对栈要求过大……
修正如下
C/C++ code#include"stdio.h"#define MAX 3000#define MIN 2#define N 10//最多一次输入10组数据int haveCell[MAX][MAX];//网格int main()
{int y[N], x[N];int i=0, j=0;int counter=0;while (scanf("%d%d",&y[counter],&x[counter])!=2)
{
rewind(stdin);
puts("请重新输入");
}for (i=0; i< y[counter]; i++)
{for (j=0; j< x[counter]; j++)
{
scanf("%d",&haveCell[i][j]);
}
}return0;
}
[/Quote]



我是要做下面这样一个题
题目描述:
生命游戏是一个有趣的模拟游戏,规则是这样的:
在一个网格里,每个格子或者有一个细胞,或者没有
在下一个时刻,
如果某一细胞周围8个格子里有4个或以上细胞,它就会拥挤而死;
如果某一细胞周围8个格子有1个或没有细胞,它就会孤单而死
如果某一格子周围8个格子有3个细胞,这里就繁殖出一个新的细胞

输入:
多组测试数据,第一行有两个数y,x,表示y行x列
且2<= x,y <= 2000,
接下来就是y行x列由0,1组成的矩阵,
1表示这个格子有细胞,0表示没有

输出:
输出下一时刻的变化

样例输入:
2 3
110
101
3 3
111
111
100

样例输出:
110
100
101
001
100


如果像你那样把下面两个for循环放到while就不行了吧。。。
还有,你说的那个对栈要求过大是什么意思。。
fanatic_egg 2009-11-23
  • 打赏
  • 举报
回复
# mstlq
# (高手都知道,俺是小菜鸟)


# jackyjkchen
# (我很菜,比mstlq更菜)
jernymy 2009-11-23
  • 打赏
  • 举报
回复
#define MAX 200 // MAX 2000

int haveCell[MAX][MAX]; //网格

这样可以不?
fanatic_egg 2009-11-23
  • 打赏
  • 举报
回复
喂喂喂。。
楼上两个。。。。
你们是一起的么。。。。
fanatic_egg 2009-11-23
  • 打赏
  • 举报
回复
1楼的估计LZ看不懂
jackyjkchen 2009-11-23
  • 打赏
  • 举报
回复
scanf有缓冲区,每次scanf完都要用getchar刷一下
mstlq 2009-11-23
  • 打赏
  • 举报
回复
逻辑有问题+对栈要求过大……
修正如下
#include "stdio.h"
#define MAX 3000
#define MIN 2
#define N 10 //最多一次输入10组数据

int haveCell[MAX][MAX]; //网格

int main()
{
int y[N], x[N];
int i = 0, j = 0;
int counter = 0;
while (scanf("%d%d",&y[counter],&x[counter]) != 2)
{
rewind(stdin);
puts("请重新输入");
}

for (i = 0; i < y[counter]; i++)
{
for (j = 0; j < x[counter]; j++)
{
scanf("%d", &haveCell[i][j]);
}
}
return 0;
}

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧