2013-02-26 1 views
-1

아래 코드는 5 개의 숫자를 요청하고 주어진 숫자의 별표를 인쇄합니다. 숫자 변수는 5 개의 숫자를 어떻게 기억합니까? 다음 번에 입력 된 값이 변수 내부의 값을 소멸시키지 않습니까? 나는 이해하지 못한다. 나 한테 설명 해줄 수있어?왜 이런가요? 숫자 변수가 5 개의 다른 값을 얻는 방법? 어떻게 기억합니까?

Enter 5 numbers between 1 and 30: 28 5 13 24 7 
    **************************** 
    ***** 
    ************* 
    ************************ 
    ******* 


#include <stdio.h> 
int main(void){  
    int i;  
    int j;  /* inner counter */ 
    int number; /* current number */ 
    printf("Enter 5 numbers between 1 and 30: "); /* loop 5 times */ 
    for (i = 1; i <= 5; i++) { 
     scanf("%d", &number);  /* print asterisks corresponding to current input */  
      for (j = 1; j <= number; j++)  
      printf("*"); 

    printf("\n"); 
    } /* end for */ 
return 0; 
} 
+4

나쁜 질문을 제 2 입력을 위해 "루프"1 복귀를 마친 후 & 작동을 시작할 때 첫 번째. 숫자를 기억하지 못합니다. 인쇄가 끝나면 입력 된 다음 번호로 바뀝니다. – QuentinUK

+0

코드를 처음 보았을 때 숫자가 인쇄 된 것보다 먼저 입력되고 다음 숫자가 입력되고 그 별표는 인쇄되지 않습니다. 하지만 컴파일하고 실행하면 전체 5 개의 숫자가 대량으로 인쇄됩니다. – Lyrk

+0

@ user1939432 원래 질문에서 콘솔 *의 공간으로 구분 된 다섯 개의 숫자를 모두 입력하는 것이 왜 * 한 번에 하나씩 5 개의 숫자를 입력하는 것과 동일한 효과가 있었는지 이해하고 싶다는 것이 분명한 것은 아니 었습니다 반환*. – chrisaycock

답변

4

질문에 대한 답변 : "입력"을 누르면 텍스트가 표준 입력에 버려집니다. scanf (..)는 stdin을 읽고 5 개의 정수를 모두 파싱합니다 (하나씩). scanf는 stdin이 비어있는 경우에만 차단합니다. 따라서 값은 숫자 변수에 저장되지 않고 표준 입력에 저장됩니다.

+0

그들은 stdin에 위치하고 있으며 루프에 의해 다시 호출되어 변수 5 번에 할당됩니다. 내가 참조 – Lyrk

0

그것은 5 개 개의 번호를 보유하지 않습니다 코드 아래

는 출력을 제공합니다. 코드는 number 값을 설정 한 다음 관련 문자 수 *를 인쇄합니다. 그런 다음 첫 번째 for 루프의 연속 반복에서 새 값을받습니다. 변수는 동시에 여러 값으로 설정되는 것이 아니라 재사용됩니다.

+0

왜 downvote? – RainbowFish

0

프로그램에 숫자를 입력 할 때마다 'int number'가 해당 숫자로 설정됩니다.

이전 값이 대체되었으며 더 이상 액세스 할 수 없습니다.

읽기 여기 http://en.wikipedia.org/wiki/Variable_(computer_science)

그것에 대해 내가 C 프로그래밍을 시작하고, 아마 파이썬처럼 뭔가로 시작하지 제안 할 수 있습니다.

+0

너무 늦었습니다. – Lyrk

2

인쇄가 각 읽기 사이에서 발생하기 때문입니다. scanf은 루프 for (i = 1; i <= 5; i++) 안에 있고 두 번째 루프는 for (j = 1; i <= number; j++)입니다.

그래서 실제로 일어나는 것은 :
1. 읽기 입력 인쇄 별표

3. 고토 1. 코드는 실제로 5 개 개의 번호를 기억하지 않습니다

는 - 그것은 단지 현재의 기억 번호.

+0

그러면 출력이 일괄 처리되는 이유는 무엇입니까? – Lyrk

+0

프롬프트에서 하나의 숫자 만 입력하고 5가 아닌 숫자를 입력하여보십시오. – William

+1

'scanf'는 공백이 될 때까지 읽습니다. 줄 끝까지 읽지 않습니다. 그러나 입력을 클릭하면, 전체 입력은'stdin'에 놓이고, 나중에 프로그램에 의해 읽혀집니다. – William

1

그래, 매우 IQ 유형 질문입니다. 줄을보세요 printf ("1과 30 사이의 5 자리 숫자 입력 :");

보다 "for 루프"가 값을 취합니다. 이 루프는 나머지 코드를 포함합니다. 그래서 "번호"테이크 값 "루프"두 번째는 ... 키보드 & 등등에서

관련 문제