本地编译器黑框输入输出
我在网上做题,在本地测试的时候需要黑框输入输出,但数据通常是按行给出,比如说两行两个输出,但我把数据粘贴在黑框里点击回车,只会出现一个输出,第二个输出害得要再手动输入一组数据,有没有什么办法可以同时输出所有的结果呢?
比如说我下面的代码,输入
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;
}
输入第二行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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: