【问题标题】:Cpp input until ctrl+dcpp 输入直到 ctrl+d
【发布时间】:2022-01-18 22:53:04
【问题描述】:

如何将最后四个值从入口传递到函数距离作为参数? 例如,如果我输入值

2 6

1 2

4 8

我希望编译器获取最后四个值 1,2,4 和 8 并打印 (1,2) (4,8) =6.7 如何从缓冲区中提取它们?

谢谢

#include <iostream>
#include <cmath>
#include <string>

struct point{

  int x1,x2;
  int y1,y2;



};

double distance(int x1,int y1,int x2,int y2){

  double d=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
  
   return (int)(d*10.0)/10.0;


}

int main(){

point a;


while(std::cin>>a.x1>>a.y1>>a.x2>>a.y2){


std::cout<<"Distance: "<< distance(a.x1,a.y1,a.x2,a.y2);

}
return 0;
}
                                                                                 
                                                                                 

【问题讨论】:

  • 您的意思是要丢弃除最后 4 个整数以外的所有输入,还是要跳过 2 并阅读第三个到第六个?无论哪种方式,只需编写一个循环来丢弃所需的数据。第一种情况稍微困难一些;你需要存储一些元素。
  • 仅供参考,更喜欢乘法,x * x,而不是pow(x,2)pow 函数用于浮点,在从整数转换为整数时可能会引入错误。此外,x * x 通常由几条指令执行。 pow 函数需要设置指令、调用指令、内容指令和返回指令。通常不仅仅是乘法。
  • 另外,在大多数几何和编程术语中,点通常是&lt;x1, y1&gt;(对于二维笛卡尔系统)。 Line 包含 2 个点;所以你应该将你的结构命名为Line,而不是point

标签: c++ buffer cin


【解决方案1】:

尝试读取第一行并忽略它:

std::string text_to_ignore;
std::getline(std::cin, text_to_ignore);
std::cin >> a.x1 >> a.y1 >> a.x2 >> a.y2;

【讨论】:

  • 为了忽略一行,调用std::cin.ignore( std::numeric_limits&lt;std::streamsize&gt;::max(), '\n' ) 可能更有效。但是,这需要包含一个额外的头文件 (#include &lt;limits&gt;)。
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多