控制台输入输出相关问题

本地编译器黑框输入输出
我在网上做题,在本地测试的时候需要黑框输入输出,但数据通常是按行给出,比如说两行两个输出,但我把数据粘贴在黑框里点击回车,只会出现一个输出,第二个输出害得要再手动输入一组数据,有没有什么办法可以同时输出所有的结果呢?

比如说我下面的代码,输入
0 0 0 1
0 1 1 0
只会输出第一个结果也就是1.00

#include 
#include 

int main(void){
    double x1,x2,y1,y2;
    while((scanf("%lf %lf %lf %lf\n",&x1,&y1,&x2,&y2)) != EOF){
        if(x1 == x2){
            if(y1 >= y2)printf("%.2f",y1 - y2);
            else printf("%.2f",y2 - y1);
        }
        else if(y1 == y2){
            if(x1 >= x2)printf("%.2f",x1 - x2);
            else printf("%.2f",x2 - x1);
        }
        else{
            printf("%.2f",sqrt(pow(x1 - x2,2.0) + pow(y1 - y2,2.0)));
        }
    }
    return 0;
}


去掉第6行scanf()里面的换行符即可,因为如果加了个换行符,需要多输入一次数据,缓冲区才会留下一个换行符,然后这个换行符才被前一个scanf()匹配到,这就是为什么多输入一次的原因(这是我的理解,供参考),所以,去掉这个换行符即可;

但是如果你是说,一次输入多组数据后,再统一显示结果的话,有一个办法就是根据要输入的最大数据项数,来定义数组存储多组数据,输入完成后再统一计算数组里的数据,并显示结果。

另外为了显示更清晰,在每个打印结果后面加个换行符。

修改如下:

参考链接:

#include <cstdio>
#include <cmath>
 
int main(void){
    double x1,x2,y1,y2;
    while((scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)) != EOF){ //去掉scanf()里面的换行符 
        if(x1 == x2){
            // 为了显示更清晰,每个打印结果后面加个换行符 
            if(y1 >= y2)printf("%.2f\n",y1 - y2);
            else printf("%.2f\n",y2 - y1);
        }
        else if(y1 == y2){
            if(x1 >= x2)printf("%.2f\n",x1 - x2);
            else printf("%.2f\n",x2 - x1);
        }
        else{
            printf("%.2f\n",sqrt(pow(x1 - x2,2.0) + pow(y1 - y2,2.0)));
        }
    }
    return 0;
}
 
 

img

输入第二行0 1 1 0后,你还需要回车才行

该回答引用ChatGPT
您看:scanf("%lf %lf %lf %lf\n",&x1,&y1,&x2,&y2)
您多写了\n,所以您在输入时需换行,如果不想换行可以把\n删掉,望采纳
代码如下:

#include <cstdio>
#include <cmath>
 
int main(){
    double x1,x2,y1,y2;
    while((scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)) != EOF){ 
        if(x1 == x2){
            if(y1 >= y2)printf("%.2f\n",y1 - y2);
            else printf("%.2f\n",y2 - y1);
        }
        else if(y1 == y2){
            if(x1 >= x2)printf("%.2f\n",x1 - x2);
            else printf("%.2f\n",x2 - x1);
        }
        else{
            printf("%.2f\n",sqrt(pow(x1 - x2,2.0) + pow(y1 - y2,2.0)));
        }
    }
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^