cin.ignore()输入两次以获得一次暂停

时间:2016-06-08 18:59:00

标签: c++

问题陈述:

我只是在学习C ++的语法,出于某种原因,我必须在脚本中输入cin.ignore();两次才能使我的程序暂停一次。请注意,第48行已注释掉,以便进行故障排除。

代码:

1   // Lab 3 Exercise 1
2   // Input Using cin >>
3   //
4   // Program by: Robert J
5   
6   #include <iostream>
7   #include <cmath>
8   #include <string>
9   using namespace std;
10  
11  // creating functions
12  float delta_miles(float end_mileage, float start_mileage){
13      return end_mileage - start_mileage;
14  };
15  
16  float mileage(float end_mileage, float start_mileage, float travel_time){
17      return (end_mileage - start_mileage) / travel_time;
18  };
19  
20  float mileconv(float miles){
21      // There are 1604 m in a mile
22      return miles * 1.604;
23  };
24  
25  int main(){
26      // Variable definitions
27      float milestart, milesend, hours, total_miles, mph;   // floatValue is of type float
28  
29      printf("Enter the starting mileage (miles): " );
30      cin >> milestart;
31      printf("Enter the ending mileage (miles): " );
32      cin >> milesend;
33      printf("Enter the number of hours traveled (2.25 horus = 2 horus 15 minutes): " );
34      cin >> hours;
35  
36      // Calculations
37      total_miles = delta_miles(milesend, milestart);
38      mph = mileage(milesend, milestart, hours);
39  
40      // Output
41      printf("\n"); // seperator that is easy to find
42  
43      printf("Total miles traveled:\t%f\n", total_miles);
44      printf("Miles per Hour: \t%f\n", mph);
45      printf("Total kilometers:\t%f\n", mileconv(total_miles) );
46      printf("Kilometers/Hour:\t%f\n", mileconv(mph) );
47  
48  //  cin.ignore();
49      cin.ignore();
50      // Exit code:
51      return 0;
52  }

尝试解决方案:

  • 我不想像我的教授一样使用system("pause");函数,因为我使用的是Unix系统而且必须system("read");,此时评分者看不到我的输出

  • 我也尝试从上一个\n删除printf,但无济于事。

问题:

有谁看到这里有什么问题?

提前致谢。

2 个答案:

答案 0 :(得分:1)

正是因为这行代码:

cin >> hours;

这会读取小时数,但不会读取您之后按下的输入。因此,您的第一个cin.ignore()调用会忽略输入密钥。只有你的第二个会导致暂停。

如果要读取线条,请使用读取线条的函数。不要使用读取数字的函数并期望它读取一行。

答案 1 :(得分:1)

David Schwartz回答了你的为什么,但是你的问题的解决方案,在程序结束时暂停,可以通过这个解决(这是我在这种情况下总是做的)

endl

cin.get(); 从流中检索一个字符,但只有在按Enter键刷新时才会这样做