A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dawei233 中级黑马   /  2014-7-27 00:15  /  1578 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 dawei233 于 2014-7-27 09:20 编辑

其实题目很简单,就是课后那道:4>设计一个函数:将一维整型数组中的元素逆序存放。比如本来是1,3,4,2,逆序存放就变成了:2,4,3,1


  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int count,a[1000],x;
  5.     printf("请输入你想创建的数组的长度:");
  6.     scanf("%d\n",&count);
  7.     printf("请输入数组的元素\n");
  8.     for (int i=0; i<count; i++) {
  9.         scanf("%d",&a[i]);
  10.     }
  11.     for(int i=0,j=count-1;i<j;i++,j--)
  12.     {
  13.         if(i!=j){
  14.             x=a[i];
  15.             a[i]=a[j];
  16.             a[j]=x;
  17.         }
  18.         else
  19.             break;
  20.     }
  21. }
复制代码

一: scanf 函数那里是不是有点问题?

二:
Xcode中运行,结果是这样:
请输入你想创建的数组的长度:5
2 4 5 1 6
请输入数组的元素
(lldb) 2 4 5 1 6
error: '2' is not a valid command.

完全不知道为什么是酱紫。知道的童鞋麻烦帮帮忙,技术分的机会来了。。。 {:3_49:}{:3_50:}

9 个回复

倒序浏览
scanf 里别用\n   因为默认是以\n结束,也就是没有接收就结束了
回复 使用道具 举报
1、少个return语句
2、for循环当中的j哪来的,没有定义,改成这样试试
#include<stdio.h>
int main()
{
    int count,a[1000],x;
        int i,j;
    printf("请输入你想创建的数组的长度:");
    scanf("%d",&count);
    printf("请输入数组的元素\n");
    for (i=0; i<count; i++) {
        scanf("%d",&a[i]);
    }
    for(i=0,j=count-1;i<j;i++,j--)
    {
        if(i!=j){
            x=a[i];
            a[i]=a[j];
            a[j]=x;
        }
        else
            break;
    }

        for(i = 0;i < count;i++)
        {
                printf("%d ",a[i]);
        }

        printf("\n");
}
回复 使用道具 举报
  1. for(int i=0; i<count/2 ;i++)
  2. {
  3.     x = a[i];
  4.     a[i] = a[count-1-i];
  5.     a[count-1-i] = x;
  6. }
复制代码

不用谢
回复 使用道具 举报
本帖最后由 dawei233 于 2014-7-27 09:31 编辑
天蚕飞 发表于 2014-7-27 00:36
1、少个return语句
2、for循环当中的j哪来的,没有定义,改成这样试试
#include

试了一下,还是这样子:error: '2' is not a valid command.{:3_65:}
回复 使用道具 举报
天蚕飞 发表于 2014-7-27 00:36
1、少个return语句
2、for循环当中的j哪来的,没有定义,改成这样试试
#include

return不是必须的,而且人家j也定义了,虽然作用域只在for循环体内
回复 使用道具 举报
dawei233 发表于 2014-7-27 09:20
试了一下,还是这样子:error: '2' is not a valid command.

程序的逻辑没错,运行其实也是可以的。但问题就是沙发所说,scanf里不要随便加空白字符,如'\n'。一个空白字符可以匹配输入中的任意多个空白字符,所以你输入元素个数后敲回车没用,因为scanf还会继续等待下一个字符去匹配'\n',你只有输入一个非空白字符并回车,才会停止匹配。你输入的这个非空白字符将进入到输入数组元素的scanf的匹配过程中。所以,输入过程就变成了这样:
程序提示“请输入你想创建的数组的长度:”,输入一个数字,比如3,回车,scanf匹配了空白字符后继续进行匹配,等待你输入。这时你就可以输入各个元素了,比如“1 2 3”,再回车,程序提示“请输入数组的元素”,因为已经输入完毕元素,这时直接敲回车,scanf就会读入你刚才输入的1 2 3。这样程序可以正常运行,但显然提示输入的目的没有达到
回复 使用道具 举报
fantacyleo 发表于 2014-7-27 10:28
return不是必须的,而且人家j也定义了,虽然作用域只在for循环体内

我试了下没有错的,我建议你把scanf那块的\n去掉,然后,你看看是不是加了断点了,我刚才是试的时候也不小加了断点出来同样的问题,就问题的字面意思是说无效命令,我觉得很可能就是手误加了断点。至于前面的那个回复是我在vc下试的,我觉得程序员该偷懒,但是有些懒还是不要偷,return我认为是个习惯而已。以上是本人建议,觉得能用试下,不行的话勿喷呀,谢谢
回复 使用道具 举报
天蚕飞 发表于 2014-7-27 11:45
我试了下没有错的,我建议你把scanf那块的\n去掉,然后,你看看是不是加了断点了,我刚才是试的时候也不 ...

我不是讨论该不该加return,而是说return并非必须,所以不加return并非楼主程序出bug的原因所在
回复 使用道具 举报
fantacyleo 发表于 2014-7-27 11:54
我不是讨论该不该加return,而是说return并非必须,所以不加return并非楼主程序出bug的原因所在 ...

了解:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马