浙江大学 ACM 1002 codeBlocks(gcc)和vs2010很诡异的编译问题

iwifigame 2010-08-09 10:45:40
界面输入为
XX..
..XX
..XX
....
怎样把它们存入字符数组city[4][4]中。
我的代码如下:

#include <stdio.h>

int main()
{
int n = 0;
int i = 0;

char city[4][4];
while( scanf("%d",&n) && 0 != n)
{
for(i = 0;i < n;i++)
{
scanf("%s",&city[i]);;
}
printf("%d\n",n);
}



在codeBlocks(gcc)环境下:最后一行在输出n时,却为0。
在vs2010环境下:最后一行在输出n时,却为4。

我想在codeBlocks(gcc)环境 下。输入
4
XX..
..XX
..XX
....(这里都没有空格)
后。打印出来的n还是原来的n值,应该怎样做。



#include <stdio.h>

int main()
{
int n = 0;
int i = 0;
int j = 0;
int i1 = 0;
char city[4][4] = {'Z'};
int count = 0;
int flag = 1;

while( scanf("%d",&n) && 0 != n)
{
count = 0;
for(i = 0;i < n;i++)
{
scanf("%s",&city[i]);;
}

for(i = 0;i < n;i++)
{
for(j= 0;j < n;j++)
{
if('.' == city[i][j] )
{
flag = 1;
for(i1 = 0;i1 < j;i1++)
{
if('.' != city[i][i1] && 'X' != city[i][i1])
flag = 0;
if('X' == city[i][i1])
flag = 1;
}
if(!flag)
continue;
for(i1 = n -1;i1 > j;i1--)
{
if('.' != city[i][i1] && 'X' != city[i][i1])
flag = 0;
if('X' == city[i][i1])
flag = 1;
}

for(i1 = 0;i1 < i;i1++)
{
if('.' !=city[i1][j] && 'X' != city[i1][j])
flag = 0;
if('X' == city[i1][j])
flag = 1;
}
if(!flag)
continue;
for(i1 = n -1;i1 > i;i1--)
{
if('.' !=city[i1][j] && 'X' != city[i1][j])
flag = 0;
if('X' == city[i1][j])
flag = 1;
}

if(flag)
{
count ++;
city[i][j] = count;
}

}
}
}
printf("%d\n",count);
}
}



在codeBlocks下运行出总是结果错误。在vs2010下能得到正确结果。
经分析是这段代码存在和上面一样的问题

for(i = 0;i < n;i++)
{
scanf("%s",&city[i]);;
}
}
...全文
192 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
好像运行有错误呀这段代码
logiciel 2010-08-09
  • 打赏
  • 举报
回复
char city[4][4]
改为
char city[4][5]

当n=4时,scanf("%s",&city[i])每次在city[i][4]上置0,在对city[3][4]置0时越界,在codeBlocks下,city[3][4]的地址是n的地址,所以n变0。在vs2010下,city[3][4]的地址可能是count的地址,所以没有影响。

65,212

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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