2016-10-26 3 views
-1

숫자가 정수인지 아닌지 식별하려고합니다. 나는이 프로그램을 실행할 때루프에 대해 약간의 오류가 있습니다.

  1. , 나는 그것을 보여주고, 같은 5.5 숫자를 입력합니다. "int로하지 않습니다 5.5을 다시 시도하십시오". 그런 다음 'a'와 같은 문자를 입력하면 "5.5 is int가 아닙니다. 다시 시도하십시오 :"라고 표시됩니다. 문자 'a'는 정수가 아닌 문자이며, 두 번째 경우로 가야하고 "No letter please"를 표시해야한다고 생각하지만 그렇지 않습니다.

  2. 처음에 'D'와 같은 문자를 입력하면 프로그램에서 '문자 없음'을 무제한 실행합니다. 나는 "편지를 써주세요"라고 표시하고 싶지만 단 한번만,이 루프에 다른 번호를 입력 할 수 있습니다.

어떻게 이러한 오류를 해결할 수 있습니까?

while (true) { 


    while ((num) != static_cast<int>(num)) { 
     cout << "\t" << num << " is not int. Please try again: "; 
     cin >> num; 
     cin.clear(); 
     cin.ignore(80, '\n'); 

    } 
    while (!(cin >> num)) { 
     cout << "\tNo letter please: "; 
     cin >> num; 
     cin.clear(); 
     cin.ignore(80, '\n'); 

    } 
    cout << "Good! " << num << " is an int!\n\n"; 

}

+0

오 마이 .. 아무리 무기한으로 달릴지라도. 'while (true)'및 절판 방법이 없습니다. – Gavin

+0

[debugger] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)로이를 수정합니다. 코드, 변수를 살펴보면 다했을 때 모든 것이 어떻게 작동하는지 알 수 있습니다. – UKMonkey

+0

글쎄, 현재 어떻게 실행되는지 설명했지만, 어떻게 실행하고 싶은지에 대해서는 설명하지 않았다. 질문을 수정하고 제작하려는 행동을 명확하게 알려주십시오. – Alyoshak

답변

0

이 방법으로 할 수 있습니다. 사용자로부터 문자열을 입력하십시오. 해당 문자열의 문자 수를 센다. 문자열 길이와 같으면 유효한 양의 정수입니다. 자릿수 문자열과 문자열의 크기보다 하나 작은 경우 음의 정수 단지 확인을 위해 0

#include <iostream> 
using namespace std; 

int main() 
{ 
string s; 
while(true) 
{ 
    cin>>s; 
    int i,no_of_digits=0; 
    for(int i=0;i<s.length();i++) 
    { 
     if(isdigit(s[i])) 
      no_of_digits++; 
    } 
    if(no_of_digits == s.length() || (no_of_digits == s.length()-1 && s[0]=='-')) 
    { 
     cout<<"Good "<<s<<" is an Integer."; 
     break; 
    } 
    cout<<s<<" is not a valid Integer!\nPlease Enter again\n"; 
} 
return 0; 
} 
관련 문제