2012-05-04 2 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]); 

Играя с ним вокруг, я был в состоянии получить его для компиляции - иногда это дает мне обратно 402018, иногда X, а иногда и просто пропускает код вообще.

Может ли кто-нибудь увидеть, где я ошибаюсь? Я хочу распечатать весь массив символов в текущем экземпляре пакета [i] (увеличивается каждый раз, когда создается пакет)

Оператор while должен убедиться, что введенный символ является числом и соответствует к ASCII, номера находятся в указанном диапазоне.

Пожалуйста, будьте нежны со мной, я очень к этому знаком.

Спасибо большое.

+0

Просьба показать внешний контур (где управляется значение 'i'). Также вы хотите ввести тестовые данные через файл, а не интерактивно - программисты не выполняют ввод данных! : D – trojanfoe

ответ

0

Вы должны использовать другую переменную цикла для ввода массива для этого конкретного пакета. прямо сейчас вы используете одну и ту же переменную для индекса пакета и символьного массива, который является «i», а вместо «scanf» я бы предложил использовать функцию «getche()» для ввода одного символа.

А также изменить свое состояние в то время как:

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' является изворотливым; он * может * означать 'пакет [i] .data [i] <57', но не уверен ... – trojanfoe

+0

Простите, это то, что я имел в виду для цикла. Кроме того, я не принимаю один ввод символов, это может быть до 50 символов в строке. – user1373475

0

Это логически неверно:

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

Изменение первого > к <.

Также вы пишете i-й индекс данных i-го массива, который снова выглядит логически некорректным. Вам необходимо поддерживать две петли для перебора пакетов, и для каждого пакета внутренний цикл считывает данные в массив данных.

Смежные вопросы