在Unix和Windows中运行一个程序

在Unix和Windows中运行一个程序,第1张

概述在Unix和Windows中运行一个程序

我正在编译一个用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中运行一个程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1154714.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存