
我正在编译一个用C语言编写的简单程序,我在windows 7和MacBook Pro上都使用Eclipse作为IDE。 很简单的程序,我的朋友写道,并要求我帮助他:
int a = 0; char b[2]; printf("input first class info:n"); printf("Credit Hours: n"); scanf("%d",&a); printf("Letter Grade: "); scanf("%s",b);
所以,当我在我的Mac上运行这个,每行打印,当我遇到scanf(),我可以input并按预期继续。 在windows中,我必须input所有内容,然后打印所有行。 我不知道为什么会发生这种情况…这是什么区别windows和Mac在这里?
苹果电脑:
input first class info: Credit Hours: 4 Letter Grade: B+
视窗:
linux内核模块 – 打开创build的字符设备导致一个错误
在执行过程中创buildwindows窗体控件
哪一个是C ++程序员最好的linux程序?
#include windows.h里面的DLL文件
在windows下C ++ ofstream写不起作用。 在linux下工作正常
4 B+ input first class info: Credit Hours: Letter Grade:
谢谢,Hristo
在__declspec之前或之后返回types?
在Visual Studio 2012中包含特征库
如何以编程方式更改屏幕保护程序?
如何在Visual Studio中使用外部库?
如何从后台进程的windows任务pipe理器中处理“结束任务”?
正如windows上的这个线程所提到的:
在你调用printf()之后,你需要fflush(stdout) printf() 。
而且,由于BUG 27663 ,在printf()的缓冲区变满之前,不会刷新到Eclipse控制台的printf()。
这有各种相关的windows控制台错误 : 错误102043和错误121454 。
这可能是由于缓冲区缓存的差异。
尝试:
fflush(stdout);
在你的scanfs之前。 当你需要看到它的时候,这将强制输出被刷新到屏幕上。
windows和Mac缓冲控制台输出的方式不同。 如果你想立刻出现,你需要通过调用来刷新它
fflush(stdout);
之后的printf。
我的猜测是,在Mac OS X上,“ n”会导致stdout被刷新,而在windows上则不然。 尝试在打印语句之后和scanf语句之前添加以下代码片段:
fflush(stdout);
就像费奥多说的那样,这很可能是一个结束的问题。
在windows上,行尾是“ r n”(回车后跟换行符)。
在Mac OSX上,行结尾只是“ r”,但“ r n”也可以,因为它包含“ r”。
在Unix / linux上,行结束通常只是“ n”。
除了需要fflush()的答案 – 你的代码包含一个缓冲区溢出。 scanf()into b写入3个字节 – { 'B','+','' } – 你的数组没有足够的空间来存储Nul终结符。 您可能需要3个字符的缓冲区,或者使用scanf(%s)以外的其他字符来读取其中的2个字符。
您想使用rn而不是n 。
总结以上是内存溢出为你收集整理的在Unix和Windows中运行一个程序全部内容,希望文章能够帮你解决在Unix和Windows中运行一个程序所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)