printf和scanf的执行顺序

习惯用notepad++写代码,用NppExec插件编译执行程序。但总遇到一个奇怪的问题:

虽然printf语句在前,但总是到程序结束才执行printf语句,比如一个求最大公约数的程序:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int gcd (int a,int b)
{
	if(b==0)
		return abs(a);	//约数为正?
	else
		return gcd(b,a%b);
}

int main(int argc, char* argv[])
{
	printf("input a and b: ");
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d",gcd(a,b));
	system("pause");
}

NppExec Console中执行的结果:

NppExec插件执行结果

NppExec插件执行结果

printf提示内容和输出结果到了最后才执行。换到mintty终端下,和上面的情况类似:

mintty执行结果

mintty执行结果

直到最近遇到mintty中不能输入sshkey密钥,才注意到mintty在windows中的局限性,或许也是因为mintty不能运行windows交互程序才导致的执行顺序错误。

不用mintty,直接用msys的终端,得到的结果是正确的:

msys终端

msys终端

6 thoughts on “printf和scanf的执行顺序

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注