4738|13

7815

帖子

57

TA的资源

裸片初长成(中级)

楼主
 

printf()肿么了 [复制链接]

折腾完 notepad++加上 gcc编译器以后,很爽地在上边玩程序。

可是,我发现一个问题,很要命的问题。

那就是,程序里写的printf语句,程序运行时,printf内容的顺序不对头。

比如说,应该先printf信息再按照信息输入的,结果它没printf出来,非要等到我输入了才出来.......

我原以为是gcc的问题吧,因为听说编译器之间各有不同。

可是我切到cmd下去编译和运行,它却正常得很!!


此帖出自编程基础论坛

最新回复

刚才也在linux下面用gcc试了一下,和vc6.0运行的效果是一样的,编译加了 -Wall,多了一些警告,是关于类型的问题的。。。。。。基本没有什么问题  详情 回复 发表于 2012-2-27 10:20
点赞 关注
个人签名

强者为尊,弱者,死无葬身之地

 

回复
举报

7815

帖子

57

TA的资源

裸片初长成(中级)

沙发
 

俺搜了搜百度,并亲自试了一下,这个方法是可行的!

那是因为默认情况下如果stdout是terminal那么stdout是行缓存的,你可以在printf后面调用fflush(stdout)来刷新缓存,立即看到printf输出。

或者,你可以改变stdout流的默认行为为“不缓存”,在程序一开始调用:

setvbuf(stdout, NULL, _IONBF, 0);

如此,以后调用printf即可马上看到输出,不必等到'\n'的出现。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

207

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
啥意思
此帖出自编程基础论坛
 
 
 

回复

535

帖子

0

TA的资源

五彩晶圆(初级)

4
 

回复 沙发 辛昕 的帖子

你说的我看不懂 ! 我遇到比较麻烦的是每次需要保存后再编译,这个有点麻烦,其他还好,用的很爽!谢谢你啊!
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

5
 

回复 4楼 小小白 的帖子

你试试这个程序好了。
如果你看不懂这个程序,先别管它,你就先运行,就行了。

  1. #include<stdio.h>
    #include<stdlib.h>

    #define LENGTH 100

    char *getString(char *buffer,char end_char);

    void main(void)
    {
    char *buffer = NULL;
    char end_char = '\n';
    buffer = (char *)calloc(LENGTH,sizeof(char));

    printf("Firstly,ENTER the ending character you want.\n");
    printf("If you don't require,just ENTER,and it would ending with the ENTER.\n");
    scanf("%c",&end_char);

    printf("You choose %c as the ending characterstic,NOW you can press in string.\n",end_char);
    buffer = getString(buffer,end_char);
    printf("%s\n",buffer);
    }

    char *getString(char *buffer,char end_char)
    {
    char i = 0;
    char j = 0;
    while( (buffer[i++] = getchar()) != end_char);
    i -= 1;
    j = i;
    for(;i < j + 5;i++)
    buffer[i] = ':';
    buffer[i] = 0;
    }
复制代码

[ 本帖最后由 辛昕 于 2012-1-27 00:19 编辑 ]
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

6
 
一编辑,页面就乱七八糟。
我简单说一下这个程序。

其实很简单,就是 首先 输入一个你指定的结束字符。
然后可以一顺输入一连串字符,直到遇到你指定的结束字符才停止接受输入,并输出所接收到的。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

7
 

回复 板凳 yixindianzi 的帖子

输出流出了问题。
大概是跟我弄得notepad++下那个运行终端 本身的 stdout 的特性有关系。
说不太清楚,这不是一个通病,只是在特定环境下出现的。提供了一个方法,就是改变stdout的属性,但我还没考虑过这个东西带来的隐患。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

4138

帖子

0

TA的资源

五彩晶圆(中级)

8
 
学习了
此帖出自编程基础论坛
 
 
 

回复

888

帖子

3

TA的资源

五彩晶圆(初级)

9
 
运行了一下楼主的代码
两点问题不明白:
1、printf函数
printf(\"Firstly,ENTER the ending character you want.\n\");
两个引号怎么加了转义字符,编译会通不过的
2、char *getString(char *buffer,char end_char)
这个函数是应当有返回值的,楼主你的没有返回值。
此帖出自编程基础论坛
 
个人签名邮箱:ternence.hsu@foxmail.com
 
 

回复

888

帖子

3

TA的资源

五彩晶圆(初级)

10
 

在vc6.0下面编译了一下

 

Firstly,ENTER the ending character you want.
If you don't require,just ENTER,and it would ending with the ENTER.
B
You choose B as the ending characterstic,NOW you can press in string.
A
B
*
A
:::::*
Press any key to continue

 

这是编译效果
printf("*%s*\n",buffer);这里我加了两个**夹了一下输出的内容,是按照代码要求的顺序输出的。

[ 本帖最后由 37°男人 于 2012-2-27 09:46 编辑 ]
此帖出自编程基础论坛
 
个人签名邮箱:ternence.hsu@foxmail.com
 
 

回复

888

帖子

3

TA的资源

五彩晶圆(初级)

11
 
刚才也在linux下面用gcc试了一下,和vc6.0运行的效果是一样的,编译加了 -Wall,多了一些警告,是关于类型的问题的。。。。。。基本没有什么问题
此帖出自编程基础论坛
 
个人签名邮箱:ternence.hsu@foxmail.com
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

12
 
能运行而已,你得看看输出的结果啊。

能运行只能说明语法没问题。
但是,输出的结果要对那才是。

一个特定的输入得到预期的输出还不叫正确,因为它应该可以容忍一定的错误甚至非法输入。

要保证一个程序基本没有错误,至少要在逻辑层面上没有错误那才可以保证——可以的话,还要包括完全理解所调用的函数,宏是没有问题的。
比如这个printf问题,它就完全出在它的参数到底是什么东西上。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

13
 

回复 9楼 37°男人 的帖子

带返回值的函数,调用取不取返回值,并没有什么问题。
当然,考虑到这个东西残留在栈上,也许会带来什么别的问题,但这个问题我也没搞清楚。

可以说的是,这里和这个问题关系不大。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

14
 
我在vc和linux下也一点问题都没有。
但偏偏我用 MinGW,和 notepad++就有问题。

用MinGW,在命令行模式下,有没有问题记不太清楚了,印象里是没有。
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表