dev C++ ,cout语句为何会影响程序的运行结果??

/*
   这是一个简单的用“扩展欧几里得”求解乘法逆元的程序,洛谷P3811:  https://www.luogu.com.cn/problem/P3811
   样例输入 10,13
  样例输出 1,7,9,10,8,11,2 ,5, 3,4
  最诡异的是,在函数exgcd()中第一行的cout语句如果执行的话,答案就是正确的,如果不执行,答案就是错误的。
  ???? 求指教
*/
#include <iostream>
using namespace std;
void exgcd(int a,int b,int gcd, int&x, int&y); //已经gcd(a,b), 求gcd(a,b)的线性组合 ax+by ; 其中 a>b 
int main(){
    int n,p;
    cin>>n>>p;
    int x,y;
    for(int i=1;i<=n;i++){
        exgcd(i,p,1,x,y);
        cout<<(y%p+p)%p<<endl;
    } 
    return 0;
}

void exgcd(int a,int b,int gcd, int&x, int&y){
    //cout<<endl<<"a="<<a<<",b="<<b<<endl; //【这一句如果执行的话,答案就是正确的。】 
    if(a<b)
        swap(a,b);
    if(0==b){
        x=gcd/a;
        return;
    }
    int xt,yt;
    //递归 
    exgcd(b,a%b,gcd,xt,yt); //用引用类型返回xt,yt
    x=yt;    
    y=xt-a/b*yt;    
    return;    
}
 

  if(0==b){
        x=gcd/a;
        return;
    }

这里错了,if里面应该是x = 1; y = 0;

跟那句cout没有关系,

int n,p;
    cin>>n>>p;

这个代码接收的输入只能是10 13这种格式,不能是10,13,不然p接收不到值

我写的格式只是一个示意,输入时使用 空格分割的

谢谢,果然是的。只是还没有理解为什么之前的输出结果会和cout语句有关呢?

我明白了,因为我原来的代码中,递归结束点没有对y赋值(y是引用类型,是需要有返回值的),所以导致奇怪的问题。但是,对于为什么cout语句会导致不同结果,还是无法理解,

你是在洛谷测试的吧,这种测试程序有可能只接受对应次数的输出来比较答案的正确与否。

还有一种可能就是 endl会输出一个换行符并立即清空缓冲区,然后输出结果就是正确答案了,你可以吧endl去掉试一下