2017-11-09 4 views
-1

Uni에서 우리는 LIFE를 프로그래밍해야하고 따라서 메뉴를 만들어야합니다. 메뉴의 사용자 입력을 읽으려면 줄 바꿈/입력을 처리/제거하는 읽기 기능을 작성해야합니다. 우리는 다음과 같이 썼습니다 :메뉴 읽기를 위해 줄 바꿈을 건너 뛰는 기능

char reading () { 
    char input ; 
    while (input != '/n') { 
     cin.get (input) ; 
     return input; 
    } 
} 

이제 cin을이 함수로 바꾸면 첫 번째 메뉴 옵션을 입력 한 후 두 번 메뉴를 인쇄합니다. 메뉴의 옵션이없는 kkk와 같은 것을 입력하면 메뉴가 4 번 인쇄됩니다. 나는 조력자 중 한 명에게 물어 봤는데 그는 몰랐고 그 기능이 옳았다는 것을 알았고 지금 당장 알지 못하는 것이 무엇인지 분명히 밝혀 냈습니다. 또한 메뉴 코드에 아무런 문제가 없다고합니다. 어쩌면 잘못되었을 수도 있고 나에게 설명 할 수있는 아이디어가 있습니까? 고마워요!

+6

그가 이니셜을 넣었더라도, 코드는 거의 완전히 잘못되어 무작위로 작성된 것 같습니다. OP에게 : "나는 조력자 중 한 명에게 물어 봤는데, 그가 몰랐고 그 기능이 옳았다는 것을 알았습니다."- 학습의 또 다른 자리로 가십시오. –

+0

예, 알았 기 때문에 고마워요! – Positron

+3

코드가 의미가 없습니다. 입력을 얻기 전에 입력 *을 테스트합니다. 테스트하지 않고 입력을 얻은 직후 함수를 종료합니다. 함수의 모든 ** 문이 수행하는 ** 것을 이해해야합니다. 그렇지 않다면 [책] (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)로 이동하여 *** 찾아보십시오. – Galik

답변

1

input 초기화하지 않으므로 루프에서 처음 읽을 때 정의되지 않은 동작이 있으므로 프로그램 전체가 의미가 없습니다. 초기화되지 않은 변수를 읽는 것은 평범하고 단순한 UB입니다.

코드에 다른 문제가 있습니다 (예 : char을 반환하는 함수에서 값을 반환하지 않는 것처럼)하지만 UB가 모두 상처를받습니다. 코드에 UB가있는 한 실제로 중요한 것은 없습니다.

+0

고마워요! UB는 무엇을 의미합니까? – Positron

+2

@Positron 왜 당신이 이해하지 못하는 대답을 수락하고 있습니까? –

+0

@Positron UB == [정의되지 않은 동작] (http://en.cppreference.com/w/cpp/language/ub). –