习惯用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中执行的结果:
printf提示内容和输出结果到了最后才执行。换到mintty终端下,和上面的情况类似:
直到最近遇到mintty中不能输入sshkey密钥,才注意到mintty在windows中的局限性,或许也是因为mintty不能运行windows交互程序才导致的执行顺序错误。
不用mintty,直接用msys的终端,得到的结果是正确的:
严格说来,不是 MinTTY 的毛病,而是原本的程序写得不严谨,提示还在缓冲区中未输出。
在 printf 和 scanf 之间插入 fflush(stdout); 否则使用 C++ 的 cout 和 cin。
试了一下,确实是这样,多谢指点
还有一个问题,为什么cmd里面就正常了呢?
有没有人告诉你,图片全是你的防盗链图片……
还真没人告诉过我... 已经注释掉防盗链代码了