2014-09-06 14 views
6
#include <cstdio> 
#include <iostream> 
using namespace std; 
int main() 
{ 
    int seconds, hours, minutes; 
    cin >> seconds; 
    hours = seconds/3600; 
    cout << seconds << " seconds is equivalent to " << int(hours) << " hours " << seconds%(hours*60) 
     << " minutes " << (seconds%(hours*3600))-((seconds%(hours*60))*60) << " seconds."; 
} 

Vì lý do nào đó, chương trình này chỉ hoạt động với số trên 3600. Có ai biết cách khắc phục sự cố này không? Bất cứ khi nào tôi làm một số dưới 3600, màn hình hiển thị với một tin nhắn từ Windows nói rằng chương trình đã ngừng hoạt động.Chuyển đổi giây thành giờ và phút và giây

Trả lời

13

Hãy thử này ra thay vào đó, thử nghiệm và hoạt động:

int seconds, hours, minutes; 
cin >> seconds; 
minutes = seconds/60; 
hours = minutes/60; 
cout << seconds << " seconds is equivalent to " << int(hours) << " hours " << int(minutes%60) 
    << " minutes " << int(seconds%60) << " seconds."; 

Vì phút là giây/60, chia cho 60 lần nữa tương đương với số giây lặn xuống 3600, đó là lý do tại sao nó hoạt động.

3

seconds/3600 là phân chia số nguyên, vì vậy cho seconds < 3600, hours0, sau đó những thứ như seconds%(hours*3600) trở thành seconds % 0, khiến một bộ phận-by-zero.


Trước tiên, hãy có quyền logic. Giả sử bạn muốn viết 5000 seconds làm x giờ y phút z giây, sao cho cả ba là số nguyên và không y cũng không phải z lớn hơn 59. Bạn sẽ làm gì?

Vâng, trước tiên bạn có thể viết nó như q phút z giây, như vậy mà cả hai đều là số nguyên và z là không lớn hơn 59. Đó là dễ dàng:

q = 5000/60 = 83 // integer division 
z = 5000 % 60 = 20 

Vì vậy, 5000 giây là 83 phút 20 giây. Bây giờ, làm thế nào để bạn viết 83 minutes vào x giờ y phút, sao cho cả hai là số nguyên và y không lớn hơn 59? Bạn làm điều tương tự:

x = 83/60 = 1 
y = 83 % 60 = 23 

OK, chúng ta hãy khái quát này:

int total, seconds, hours, minutes; 
cin >> total; 
minutes = total/60; 
seconds = total % 60; 
hours = minutes/60; 
minutes = minutes % 60; 
cout << total << " seconds is equivalent to " << hours << " hours " << minutes 
    << " minutes " << seconds << " seconds.\n" ; 
+0

làm cách nào để khắc phục lỗi này? –

+2

@SeanChen: bằng cách suy nghĩ một chút và thực hiện một số "toán học" cơ bản. Làm thế nào sẽ * bạn * chuyển đổi (trên giấy với một cây bút chì!) Giây để giờ và phút và giây –

2

Bạn đã có một chia-by-zero vấn đề ở đây:

seconds % (hours*60); 

hours là 0 bởi đức hạnh của phân chia số nguyên.

hours = seconds/3600; 

Từ những gì bạn đang cố gắng làm, bạn nên xem xét logic điều kiện để in phút nếu tổng số giây lớn hơn 3600. Bạn cũng sẽ muốn điều tra logic tương tự trong phần tiếp theo của luồng in của bạn.

C++ của tôi là gỉ, nên tha thứ nếu đây không phải là chính xác cú pháp hợp lệ:

cout << (seconds > 3600 ? seconds % (hours*60) : seconds) << endl; 
1

bằng cách sử dụng hàm;

#include<iostream> 

    using namespace std; 
    int hour(int h) 
    { 
     int second; 
     //second=(h/3600); 
     if (h>3600) 
      second=h/3600; 
     else 
      second=(h/3600); 
     return (second); 
    } 

    int minute(int m) 
    { 
     int second2; 
     second2=( ); 
     return(second2); 
    } 

    int second(int s) 
    { 
     int second3; 
     second3=((s-3600)%60); 
     return (second3); 
    } 

    void main() 
    { 
     int convert; 
     cout<<"please enter seconed to convert it to hour\b"; 

     cin>>convert; 
     cout<<"hr : min : sec \n"; 
     cout<<hour(convert)<<":"<<minute(convert)<<":"<<second(convert)<<endl; 
     system("pause"); 
    } 
Các vấn đề liên quan