2012-05-04 3 views
0

정수의 배열, 인쇄하는 방법 :다음과 같다 내가 패킷을 에뮬레이션하기 위해 사용하고 구조체를 가지고

typedef struct{ 
int source; 
int dest; 
int type; 
int port; 
char data[50]; 
}test; 

test packet[50]; 

그리고 데이터에 무엇이든 인쇄하려고 해요을 필드를 입력하십시오. 나의 현재 코드는 다음과 같습니다

printf("Enter a series of data numbers from 1-50: "); 
    scanf("%c", &packet[i].data[i]); 

    while (packet[i].data[i] > 48 || packet[i].data[i] > 57) 
     { 
     printf("Data series needs to be between 1-50, try again: "); 
     scanf("%c", &packet[i].data[i]); 
     } 
    printf("%c \n", packet[i].data[i]); 

그것으로 장난으로 내가 컴파일 얻을 수있었습니다 - 때로는 때로는 X, 나에게 다시 402,018를 제공하고 때로는 아예 코드를 건너 뜁니다.

어디서 잘못 볼 수 있습니까? 패킷의 현재 인스턴스에서 전체 문자 배열을 출력하고 싶습니다. (패킷이 생성 될 때마다 증가합니다)

while 문은 입력 된 문자가 숫자인지, ASCII로, 숫자는 상기 범위 내에있다.

제발 친절하세요. 저는이 점에 대해 매우 신났습니다.

고맙습니다.

+0

바깥 쪽 루프 ('i'의 값이 제어되는 곳)를 보여주십시오. 또한 대화 형이 아닌 파일을 통해 테스트 데이터를 입력하려고합니다. 프로그래머는 데이터 입력을하지 않습니다! : D – trojanfoe

답변

0

특정 패킷에 대해 배열 입력을 위해 다른 루프 변수를 사용해야합니다. 지금은 "i"인 패킷 인덱스 및 문자 배열 인덱스에 대해 동일한 변수를 사용하고 있으며 "scanf"대신 단일 charater 입력에 "getche()"함수를 사용하는 것이 좋습니다.

또한이에 잠시 조건을 변경 : "x"가 추가 루프 변수입니다

while (packet[i].data[x] >= 48 || packet[i].data[x] <= 57) 

.

for(i=0;i<=49;i++) 
    printf("Enter a series of data numbers from 1-50: "); 
    for(x=0;x<=49;x++){ 
     packet[i].data[x] = getche(); 
     printf("%c \n", packet[i].data[x]); 
     if(packet[i].data[x] >= 48 || packet[i].data[x] <= 57) 
      { 
      printf("Data series needs to be between 1-50, try again: "); 
      packet[i].data[x] = getche(); 

      } 
else 
{ 
    break; 
} 

    } 
+0

또한 'while'의 테스트는 사기다. 그는 * 패킷 * [데이터] [57]을 의미 할 수도 있지만 확실하지는 않습니다 ... – trojanfoe

+0

미안하지만 그건 내가 루프를 의미하는 것입니다. 또한 단일 문자 입력을 사용하지 않고 문자열에서 최대 50 자까지 입력 할 수 있습니다. – user1373475

0

이 논리적으로 올바르지 않습니다

while (packet[i].data[i] > 48 || packet[i].data[i] > 57) 
          ^^      ^^ 

변경하려면 <에 대한 첫 번째 >.

또한 논리적으로 잘못된 것으로 보이는 i 번째 배열 구성원의 i 번째 인덱스에 쓰고 있습니다. 패킷을 반복하기 위해 두 개의 루프를 유지해야하며 각 패킷에 대해 내부 루프가 데이터를 데이터 배열로 읽습니다.

관련 문제