繁体   English   中英

在Unix和Windows中运行程序

[英]running a program in Unix vs in Windows

我正在编译一个用C编写的简单程序,我在Eclipse 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()时,我可以按预期输入和继续。 在Windows中,我必须输入所有内容然后它将打印所有行。 我不确定为什么会发生这种情况......这与Windows和Mac有什么区别?

苹果电脑:

Input first class info:
Credit Hours: 4
Letter Grade: B+

视窗:

4
B+
Input first class info:
Credit Hours:
Letter Grade:

谢谢,Hristo

正如Windows上的这个帖子所提到的那样:

在调用printf()之后,你需要fflush(stdout) printf()

此外,由于错误27663 ,在Eclipse控制台上执行printf()不会刷新,直到printf()的缓冲区变满。
这有各种相关的Windows控制台错误错误102043错误121454

这可能是由于缓冲区缓存的差异。

尝试:

fflush(stdout);

在您的scanfs之前。 当您需要查看时,这将强制将输出刷新到屏幕。

Windows和Mac以不同方式缓冲控制台输出。 如果您希望它立即显示,您需要通过调用来刷新它

fflush(stdout);

在printf之后。

我的猜测是,在Mac OS X上,“\\ n”会导致stdout被刷新,而在Windows上却不是这样。 尝试在print语句之后和scanf语句之前添加以下代码:

fflush(stdout);

就像费奥多尔所说,这很可能是一个终结问题。

在Windows上,行结尾是“\\ r \\ n”(回车后跟换行)。

在Mac OSX上,行结尾只是“\\ r”,但“\\ r \\ n”也有效,因为它包含“\\ r”。

在Unix / Linux上,行结尾通常只是“\\ n”。

除了有关fflush()需求的答案之外 - 您的代码包含缓冲区溢出。 scanf()到b写3个字节 - { 'B', '+', '\\0' } - 你的数组没有足够的空间来存储NUL终结符。 您需要一个3个字符宽的缓冲区,或者使用除scanf(%s)以外的其他内容来读取2个字符。

您想使用\\r\\n而不是\\n

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM