标题:void 的返回值问题
只看楼主
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
得分:0 
回复 8楼 qunxingw
谢谢。
2013-03-25 10:40
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
得分:0 
回复 4楼 pengyancai
谢谢!
2013-03-25 10:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:2 
函数的返回值是函数向上司提交工作汇报,函数实际做什么与它的报告是否相符,又是另一回事。你写了函数有打印输出动作,它就会打印,从职能(函数命名)和制度(返回数据)都看不出来函数做了什么,那是你的管理出了问题。

授人以渔,不授人以鱼。
2013-03-25 10:49
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:0 
回复 10楼 第二周杰伦
额    void reverse(int a); 这个函数没有返回值是没错, 但是在你定义的这个函数里有输出啊  printf("%d ",c);  
那样的话 main 函数调用 reverse 函数的话虽然不能得到 reverse 的返回值,但是输出还是会有的
比如说,你输入一个 5;
下一步就是reverse(5);也就是说main把这个参数 5 传给 reverse 函数运行,

 5 在 reverse 函数里的运行过程是这样的:1、i=0, 5!=0, c=5%10=c, 输出一个5, a=a/10=5/10=0;
                                        2、i=1, a=0,  循环终止。
就这样,reverse 函数调用结束,接着执行 main 函数的下一步 printf("\n"); 然后程序就结束了...

虽然你定义的这个 reverse 函数毫无意义,但程序上没有错误

[ 本帖最后由 韶志 于 2013-3-25 10:59 编辑 ]

三十年河东,三十年河西,莫欺少年穷!
2013-03-25 10:58
好聚好散
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:138
专家分:123
注 册:2012-12-4
得分:2 
void主要运用于指针,,void f1(int *p).........
但是void内也可以打印printf

无节操,无真相
2013-03-25 11:03
qwe885167759
Rank: 4
等 级:业余侠客
威 望:5
帖 子:148
专家分:259
注 册:2013-3-12
得分:2 
回复 10楼 第二周杰伦
同意十四楼。

[ 本帖最后由 qwe885167759 于 2013-3-25 11:08 编辑 ]

我本楚狂人,凤歌笑孔丘
2013-03-25 11:05
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
得分:0 
回复 6楼 wp231957
问一个问题:
#include <stdio.h>
#define N 10
void sort(char a[])
{
    int i,j;
    char c;
    for(i=0;i<N;i++)
    {
        for(j=0;j<N-1;j++)
            if(a[j]<a[j+1])
            {c=a[j];a[j]=a[j+1];a[j+1]=c;}
    }

}

main()
{
    char str[N];
    int i;
    printf("input 10 character:\n");
    for(i=0;i<N;i++)
        scanf("%c",str+i);
    sort(str);
    printf("input new array:\n");
    for(i=0;i<N;i++)
        printf("%c",*(str+i));
    printf("\n");
}
为什么上面那个函数“  void sort(char a[])   ”要定义成void?这是我写的程序实现十个字符的比较。
我的问题是我的函数“sort(str);”函数实参是数组名,被调用函数形参也是数组,这样,相当于两个数组对同一段内存操作。在被调用函数中是对单元内容的操作。这个时候我就不明白了,我没有return返回语句,我的函数只是在实现一组字符大小的排序。没有return那样的返回动作,我的函数应该定义成什么类型?
也就是的我的函数只是进行有关一些指针操作,没有返回值,那么这个时候我的函数应该定义成什么类型。
谢谢!
2013-03-25 11:10
第二周杰伦
Rank: 2
等 级:论坛游民
帖 子:55
专家分:20
注 册:2013-3-23
得分:0 
回复 4楼 pengyancai
你好,首先表示感谢。
有几个问题请教一下:
1 用“scanf”和‘gets’这两个函数输入时,按什么键结束输入。如果我用‘gets’函数输入一句话到一个字符数组。比如“I am student.”中间有空格应如何输入?
谢谢!
2013-03-25 11:19
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
得分:0 
回复 18楼 第二周杰伦
你所说的是一维字符数组的输入,所以是在定义了字符数组的基础上,比如说:char c[10];
1、scanf("%s",c); 是格式控制输入法,
   c代表的是数组的首地址,所以不必加取地址运算符 & 了;
   用 scanf 输入时 首先,应保证输入长度小于数组长度,
                   其次,当输入串中含有空格,则只把空格之前的部分读入数组,空格以后的部分舍弃
                   最后,输入换行键结束输入

2、gets函数输入
   gets(c);  与 scanf 函数相比,gets 函数的好处是输入字符串中可以包含空格,并以 换行键 结束输入

下面有一个例子:
程序代码:
#include <stdio.h>
main()
{
    char ch1[10],ch2[10];
    scanf("%s",ch1);
    printf("%s\n",ch1);
   
    fflush(stdin);
   
    gets(ch2);
    puts(ch2);
    return 0;
}

三十年河东,三十年河西,莫欺少年穷!
2013-03-25 11:46



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-401697-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051141 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved