简单而又奇怪的问题!!!!!请指点:

xboy 2003-07-25 09:06:51
建了一个 WIn32 Console Application 的hello样式的project
把里面的类容换成

#include "stdafx.h"
#include "iostream.h"
#include "stdio.h"
#include "conio.h"

void main()
{
printf("asdfasdf");
cout<<"123321123321";//AAAA
printf("aaaaaaaa");
getch();
}


//AAAA处既不报错也不执行,在我的vc++6上是这样的,为什么啊,能帮我试一下么?
//好象程序到AAAA处就自动跳到下一句了!不会是我的vc有问题吧
...全文
33 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckp 2003-07-25
  • 打赏
  • 举报
回复
楼上的是高手
escout 2003-07-25
  • 打赏
  • 举报
回复
#include "stdafx.h"
#include "iostream.h"
#include "stdio.h"
#include "conio.h"

void main()
{
printf("asdfasdf");
cout<<"123321123321";//AAAA
cout.flush();//添加这一句
//cout<<endl;////添加这一句也行
printf("aaaaaaaa");
getch();
}
只要添加那一句就可以了。
原因是iostream用缓冲机制,cout<<并不是马上输出,而是遇到流结束,或者缓冲区满了,才开始真正的输出。这和MFC中的CArchive一样,ar<<,ar>>也并不是马上输出,要等到缓冲区满或者流结束,才开始输出。所以,我们在用的时候一般在后面加一句ar.flush()强制清缓冲区。这里的flush也是这个作用。

至于说和printf等混用,只要你掌握好这些机制,也是可以的,不过不推荐这样做。printf也有缓冲机制,不过是每执行一次,马上输出。但是,没有用到的输入数据仍然是在缓冲区的,所以,输入时是现在缓冲区中取数据,取完了还需要数据就等待用户输入,所以,我们会发现,如果我们调试时多输入了数据,下一条输入语句用的就是刚才的输入。
ckp 2003-07-25
  • 打赏
  • 举报
回复
又,据Effective C++M2,
C++中,尽量使用<iostream>+using namespace std;而不要使用<iostream.h>
<iostream.h>是为了和C兼容而设的,不如<iostream>扩展性和安全性好。
不好意思,我也是刚起步。我也有很多不懂的地方。
xboy 2003-07-25
  • 打赏
  • 举报
回复
非常感谢两位提供的帮助!!
ckp 2003-07-25
  • 打赏
  • 举报
回复
不过你按一下回车键,AAAA处就出来拉.你最好将getch()注释掉.
可以看出结果如下:
asdfasdfaaaaaaaa
问题的确很怪,
怎么cout<<要在最后才输出结果呢?
也就是说,//AAAA处的语句是在getch()之后执行.
这只能说,printf是直接调用int21输出,而cout是面向对象的编程技术,cout虽然是在printf之前编译,但执行时,OOP代码的输出是放在传统的输出之后的?
或者:scanf的静态编译是放在cout的动态编译之后?
这是不是VC的一个BUG?
所以说,我得出一个结论:在C++中输出结果,最好统一使用cout不要将cout与printf混合使用.:-)
各位同仁认为是否正确?
此外,我又想到了另一个问题:内存分配
Effective C++M3
尽量使用new和delete而不要使用malloc和free.:-)
xboy 2003-07-25
  • 打赏
  • 举报
回复
to : SoLike(是我) 按你说的办了,pass,能告诉我为什么么?
谢谢了
思危 2003-07-25
  • 打赏
  • 举报
回复
注意:
#include <iostream> //用标准头文件, 不是"iostream.h"

或者
#include "iostream.h"
#include "stdio.h"
#include "conio.h"

void main()
{
printf("asdfasdf");
cout<<"123321123321" << endl; //加endl;
printf("aaaaaaaa");
getch();
}
xboy 2003-07-25
  • 打赏
  • 举报
回复
加上std;;后报错:error C2653: 'std' : is not a class or namespace name

是不是我的vc有问题??
思危 2003-07-25
  • 打赏
  • 举报
回复
#include <iostream>
#include "stdio.h"
#include "conio.h"

void main()
{
printf("asdfasdf");
std::cout<<"123321123321";//AAAA
printf("aaaaaaaa");
getch();
}
xboy 2003-07-25
  • 打赏
  • 举报
回复
我是说下面这一句不执行也不报错啊!!
cout<<"123321123321";
lygfqy 2003-07-25
  • 打赏
  • 举报
回复
这段程序并没有问题啊。cout是iostream中的函数,//aaaa是注释,一切正常啊
laokedou 2003-07-25
  • 打赏
  • 举报
回复
高手。pfpf
bells2000 2003-07-25
  • 打赏
  • 举报
回复
escout(侦察兵) 厉害.! 小弟学习.

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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