关于一道数组循环问题,求大神帮帮忙看看.

小丫么小菜鸡 2018-11-10 06:54:47

#include <stdio.h>
int main(int argc, char **argv) {
int n;
int m;
int flag;

scanf("%d",&n);
int num1[n];
for(int i=0;i<n;i++){
scanf("%d",&num1[i]);
}

scanf("%d",&m);
int num2[m];
for(int i=0;i<m;i++){
scanf("%d",&num2[i]);
}

for(int i=0;i<n;i++){
flag=0;
for(int j=0;j<m;j++){
if(num1[i]==num2[j]){
flag = 1;
break;

}
}
for(int n=0;n<i;n++){
if(num1[n]==num1[i]){
flag=1;
break;
}
}
if(flag==0){
printf("%d ",num1[i]);
}


}

printf("\n");

for(int i=0;i<m;i++){
flag=0;
for(int j=0;j<n;j++){
if(num1[j]==num2[i]){
flag=1;
break;
}
}
for(int n=0;n<i;n++){
if(num2[n]==num2[i]){
flag=1;
break;
}
}
if(flag==0){
printf("%d ",num2[i]);
}
}
}

------------------------------------------------------------------------------------------------------------------------------------
以上代码我输入:
4
5
5
7
7
4
2
2
3
3
我预期希望显示:
5 7
2 3

但却显示了:
5
2 3
所以求大神帮帮忙看看哪出了问题,先谢谢了!~
...全文
39 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小丫么小菜鸡 2018-11-12
  • 打赏
  • 举报
回复
引用 6 楼 cfjtaishan 的回复:
#include <stdio.h>

int main(int argc, char **argv)
{
int n;
int m;
int flag;

scanf("%d",&n);
int num1[n];
for(int i=0;i<n;i++){
scanf("%d", &num1[i]);
}

scanf("%d",&m);
int num2[m];
for(int i=0;i<m;i++){
scanf("%d",&num2[i]);
}

for(int i=0;i<n;i++) {
flag=0;
for(int j=0;j<m;j++){
if(num1[i]==num2[j]){
flag = 1;
break;

}
}
for(int k=0;k<i;k++){
if(num1[k]==num1[i]){
flag=1;
break;
}
}
if(flag==0){
printf("%d ",num1[i]);
}


}

printf("\n");

for(int i=0;i<m;i++){
flag=0;
for(int j=0;j<n;j++){
if(num1[j]==num2[i]){
flag=1;
break;
}
}
for(int k=0; k<i;k++){
if(num2[k]==num2[i]){
flag=1;
break;
}
}
if(flag==0){
printf("%d ",num2[i]);
}
}
}


不过,建议把n作为循环变量的地方改成k,这样可能会更好理解一些,不然代码看着不易理解。
改成k之后,测试过,能得到预期的结果。

-------------------------------------------------------------------------------------------------
不好意思啊,我刚用dev++,运行无异常,所以我结贴了。。。。 突然间一分钟后你回复了,不然我就给你分了. 不好意思了 大神
自信男孩 2018-11-12
  • 打赏
  • 举报
回复
#include <stdio.h>

int main(int argc, char **argv)
{
int n;
int m;
int flag;

scanf("%d",&n);
int num1[n];
for(int i=0;i<n;i++){
scanf("%d", &num1[i]);
}

scanf("%d",&m);
int num2[m];
for(int i=0;i<m;i++){
scanf("%d",&num2[i]);
}

for(int i=0;i<n;i++) {
flag=0;
for(int j=0;j<m;j++){
if(num1[i]==num2[j]){
flag = 1;
break;

}
}
for(int k=0;k<i;k++){
if(num1[k]==num1[i]){
flag=1;
break;
}
}
if(flag==0){
printf("%d ",num1[i]);
}


}

printf("\n");

for(int i=0;i<m;i++){
flag=0;
for(int j=0;j<n;j++){
if(num1[j]==num2[i]){
flag=1;
break;
}
}
for(int k=0; k<i;k++){
if(num2[k]==num2[i]){
flag=1;
break;
}
}
if(flag==0){
printf("%d ",num2[i]);
}
}
}


不过,建议把n作为循环变量的地方改成k,这样可能会更好理解一些,不然代码看着不易理解。
改成k之后,测试过,能得到预期的结果。
636f6c696e 2018-11-12
  • 打赏
  • 举报
回复
编译就有问题吧 你代码问题在for循环里面的局部变量混乱不清 29/52行都有问题,你的n已经用作数组长度,为什么还拿来做循环递增的变量?
小丫么小菜鸡 2018-11-12
  • 打赏
  • 举报
回复
引用 3 楼 qq_36790578 的回复:
int num[n];
怎么编译通过的

c99以后数组定义都可以用变量定义长度
lkj2016 2018-11-11
  • 打赏
  • 举报
回复
int num[n];
怎么编译通过的
Isnis-fallen 2018-11-11
  • 打赏
  • 举报
回复
把 n m 都改为4, i 去掉重复初始化, 运行输出就是 5 7 2 3 逻辑好像没 问题
dengwhat 2018-11-10
  • 打赏
  • 举报
回复
第8\24行能编译过么

69,381

社区成员

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

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