2013-02-27 4 views
1

그럼 내 질문은 다음과 같습니다.While 루프 C에서 스캔 루프

int n=0; 
while(n<=0) 
    scanf("%d",&n); 

이 코드는 무한 루프에 입력하고 그 이유를 아무것도하지 않습니다. 사용자가 숫자> 0을 입력하면 루프가 중지 된 것으로 간주됩니다.

덕분 :)

+2

을 - n'가 초기화되지'때문이다. 루핑하는 것을 어떻게 알 수 있습니까? 숫자를 입력하고 Enter 키를 누르셨습니까? –

+0

방금 ​​컴파일했고 값 1을 입력하고 Enter 키를 누르면 루프가 종료되었습니다. 나는 당신의 문제가 당신의 프로그램의 다른 곳에 있다고 생각합니다. 최적화 문제가 발생하지 않도록 'n'을 '휘발성 int'로 만들 수 있습니다. – mrh

+0

I * very * 많은 문제가 옵티 마이저에 의해 발생했는지 의심 스럽지만 '휘발성'으로 해결할 수 없습니다. –

답변

0

나는 괜찮은 결과를 얻고 있기 때문에 컴파일러를 바꾸어야한다고 생각합니다.

어딘가에 문제가있을 수 있습니다.

당신은 여기에서 확인할 수 있습니다 :

http://ideone.com/C4Yobi

코드 : 코드는 모든 루프를 입력하지 않을 수도 있습니다

#include<stdio.h> 
main() 
{ 
int n = 0; 
while (n <= 0) 
    scanf("%d",&n); 
printf("%d",n); 
} 

Input: 
-5 
4 
Output: 
4 
+0

감사합니다. 나는 리눅스에서 gcc를 사용하고있다. – user2116077

+0

나는 3 개의 컴파일러로 시도했다. 그것의 일 벌금. – Arpit

+0

오케이 죄송합니다. 감사합니다. 나는 내일 선생님과 이야기 할 것이다. gcc의 문제인 것 같다. – user2116077

1
while (n <= 0) 
    // something 

을 의미 "n의 값이 작거나 0 같다 동안 무언가를". 조건 n <= 0을 평가할 때 n이 초기화되었는지 확인하십시오. 초기화되지 않은 변수를 사용하면 정의되지 않은 동작 이 발생합니다..

당신은 수행해야합니다

int n = 0; 
while (n <= 0) 
    scanf("%d\n",&n); 
+0

네, 알아요, 그래서 스캔이 n> 10이되면, 바로 멈춰야합니까? – user2116077

+0

@ user2116077 물론, 내 대답을 봐야합니다. –

+0

이미 무한 루프와 동일합니다. – user2116077

4

을 반복하고 반복 ...

stdin이다 (일반적으로) 라인 버퍼 - 하나는 단말기 전송에게 문자를 만들기 위해 <enter>을 눌러이 귀하의 프로그램에. 그래서 버퍼에 매달린 개행 문자가 있고, 다음 반복에서 scanf()이 그것을 읽으려고 시도하지만 정수가 아니므로 실패하고 변수의 내용을 변경하지 않습니다. 이 문제를 해결하려면 scanf()는 줄 바꿈을 먹고합니다

scanf("%d\n", &number); 

(아, 네, n는 초기화되지 않은 사용되지만 그 문제 없습니다 그래서 코드는, 어쨌든 루프에 들어갑니다 것으로 보인다 를 초기화 마십시오. 하지만, 다른 사람 다른 이상한 오류 얼굴 것입니다.)

+0

이미 시도했지만 작동하지 않았지만 어쨌든 고마워요. – user2116077

+0

@ user2116077이 답변의 품질에서 추측했습니다 (미안하지만 ...) - 당신 코드에 다른 문제/의미 론적 오류/정의되지 않은 동작이있을 수 있습니다. 그것도 확인하십시오. –

+0

@ H2CO3 in C++ 그것은 UB이지만 C의 경우에도 마찬가지입니다. – Arpit

0

당신이 일을 시도하고 그들이 작동하지 않았다 (비록 내가 왜 볼 수는 없지만) 뭔가 다른 것을 시도합시다. 프로그래머의 가장 친한 친구 인 printf을 사용합시다. 이 코드를 대신 실행하는 방법에 대해

int n = 0; 

while(n <= 0) 
{ 
    printf("Please enter a number: "); 
    scanf("%d\n", &n); 
    printf("I see you entered: %d\n", n); 
} 

printf("Done with the loop. The value of n is: %d\n", n); 

이렇게하면 컴퓨터가 수행중인 작업과 컴퓨터가 읽고있는 값을 읽을 수 있습니다. 코드를 위의 코드로 바꾸어보고 어떤 일이 발생하는지 봅시다.

+0

두 번째 입력을 마친 후에는 더 이상 멈추지 않습니다. – user2116077

+0

컴퓨터가 출력하는 내용을 표시하십시오 ... –

+0

숫자를 입력하십시오 : 5 입력 한 것으로 보입니다. 5 루프를 종료했습니다. n 값은 5 – user2116077