2013-07-16 6 views
4

저는 C++을 처음 접했습니다.이 질문이 정말 간단하다면 죄송합니다. 주사위를 굴려서 사용자가 단어를 입력 할 때까지 번호를 표시하는 C++ 프로그램을 작성하고 있습니다 취소하지만 내 루프는 내가 문서라도 내 코드입니다 취소 입력해도 끝나지 않는다 (내가 dev에 C++ 사용) : 당신이 실제 문자열 내용을 포인터를하지 비교하기 때문에내 do-while 루프가 끝나지 않았습니다

#include<iostream> 
#include<conio.h> 
#include<stdlib.h> 
#include<stdio.h> 
using namespace std; 
int dice (int); 
int main() 
{ 
    char k[7]; 
    int x; 
    do 
    { 
      cout<<"your dice number is: "<<dice(x)<<endl; 
      cout<<"do you want to cancel or continue?"; 
      cin>>k; 
    }while(k!="cancel"); 
      cout<<"END"; 
      getch(); 
} 
int dice (int a) 
{ 
    srand(time(NULL)); 
    for(int i=1;i<100;i++) 
     { 
      a=(rand()% 6)+1; 
     } 
      return a;   
} 
+0

답장을 보내 주셔서 감사합니다. 내 프로그램이 작동합니다. 감사합니다. – user2589043

+0

유용 할 경우 답변을 수락 할 수 있습니다 (타이머가 다 끝났 으면). – Borgleader

답변

2
  1. 당신은

    }while(k!="cancel"); 
    

    }while(strcmp(k,"cancel")!=0); 
    

    을 수정해야하거나 더 나은 당신은 표준 문자열 클래스를 사용할 수 있습니다 comparing two C++ strings의 예가 있습니다.

  2. 주사위를 여러 번 던지고 동일한 임의의 값을 얻는다는 것을 알게됩니다. 왜냐하면 임의성을 시드하는 데 사용되는 time()이 동일한 초에서 실행될 때 동일한 초를 반환하기 때문입니다.

    : 당신은 주사위의 코드 단지 하나의 선으로 극복 할 수있는, 주사위 100 번 던질 필요 루프 동안 할 일 전에 주요 기능에

    srand(time(NULL)); 
    

    을, 당신은 그나마 그러므로 당신은 이동해야

    return (rand()% 6)+1; 
    
6

그것은 사실이 결코를 . std::string을 사용해야하는 또 다른 이유가 있습니다 (비교 연산자는 문자열 자체를 비교합니다).

이 비교를 수행하는 C 방법은 strcmp이고, C++ 방법은 std :: string을 사용하여 비교 연산자 (즉, operator==)에 의존하는 것입니다. 그러나이 태그가 C++이기 때문에 std::string을 사용하는 것이 좋습니다.

strcmpherestd::stringhere에 대한 설명서를 찾을 수 있습니다.

0

당신은 cin >> k 대신에 cin.getline을 사용해야합니다. 특히 사용자가 입력해야 할 입력의 공백을 고려해야합니다.

EDIT : 많은 사람들이 언급했듯이 리터럴과는 반대로 문자열을 사용해야합니다.

1

!= 원시 문자열은 사용자가 생각하는대로 수행되지 않습니다. 물론 문자열 자체를 비교하지는 않습니다. 포인터 주소는 물론 항상 다를 것입니다.

이 경우 strcmp을 사용하십시오.

3

std :: strcmp 함수를 사용하십시오. 문자열 리터럴에 대한 포인터를 비교하는 것입니다. 하지만 다른 사람들처럼 std :: string을 사용해야합니다.

+0

하하, 나는 이것이 답을 찾지 못한다는 것을 알고있었습니다. 다른 것들은 모두 더 철저했습니다. –

+0

참으로. 좋은 자기 반성. 학습 경험을 위해 +1을 가짐 :) – sehe

+0

고맙습니다. 매우 감사 :) –

0

당신은 C 스타일의 문자열을 비교하는 strcmp 기능을 사용해야합니다

}while(strcmp(k, "cancel") != 0); 
0

당신은 그런 문자 문자열을 비교할 수 있습니다 만 std::string는 'K'의 포인터를 비교하는 것처럼 그런 식으로 비교 될 수있다 상수 "취소"의 포인터에. strncmp을 사용해야하지만 C++을 사용하고 있으므로 std:string을 대신 사용해야합니다.

또한 사용자가 7 자 이상의 문자열을 입력하면 std::string을 사용하면 버퍼 오버 플로우로 인해 예기치 않은 동작이 발생할 수 있습니다. 이미 C++

다음

여기 reference for strcmp이며 사용하는 경우

관련 문제