2015-11-20 4 views
1

Я пишу код о вставив класс/студент номер (KAS)/Имя студента в массивыC - Печать массив не работает должным образом

И после того, как неизвестное количество входов напечатать их в конце концов

ВОПРОС: Вопрос о моем проекте заключается в том, что при печати результатов некоторые неисправные элементы при печати.

Я попытался проверить каждый элемент, который я вставленный точное время после того как я сделал вход (с printf(...)) и все казалось прекрасным.

Но все же на выходе некоторые из них были неправы.

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int grade[100] , KAS[100] ,x,spots = 0; // KAS = student number 
    char name[spots][14], answer; 

    printf("Please insert a grade : "); 
    scanf("%d", &grade[spots]);  
    getchar(); 

    printf("Please add a KAS : "); 
    scanf("%d",&KAS[spots]); 
    getchar(); 

    printf("Please enter a name : "); 
    scanf("%s",&name[spots]); 
    getchar(); 

    printf("\nDo you want to add another value? y/n : "); 
    scanf("%c",&answer); 
    puts(""); 
    getchar(); 

    while(answer == 'y') 
    { 
     spots++; 

      printf("Please insert another grade : "); 
      scanf("%d", &grade[spots]); 
      getchar(); 

      printf("Please add another KAS : "); 
      scanf("%d",&KAS[spots]); 
      getchar(); 

      printf("Please enter another name : "); 
      scanf("%s",&name[spots]); 
      getchar(); 


      printf("\nDo you want to add another value? y/n : "); 
      scanf("%c\n",&answer); 
      puts(""); 
      getchar(); 

      if(answer == 'n') 
      { 
       break; 
      } 
    } 
    puts("*****************************"); 
    for(x = 0; x < spots; x++) 
    { 
     puts(""); 
     printf("%d. Student's great : %d\n",x,grade[x]); 
     printf("%d. Student's KAS : %d\n",x,KAS[x]); 
     printf("%d. Student's name : %s\n",x,name[x]); 
    } 
    puts("\n*****************************\n"); 
} 
+0

Почему эти 'getchar' в вашем коде? –

+0

Подсказка: подумайте о чем-то вроде 'name [1] [14]' и проверьте свое определение .... –

+0

'char name [пятна] [14]' -> 'имя символа [100] [14]' – BLUEPIXY

ответ

2
char name[spots][14];   //as spots is 0 , it would be name[0][14] 
/* you would end up access invalid memory and cause UB */ 

Вы должны изменить это -

char name[100][14]; 

А также, принимая вход в обоих заявлениях внутри и перед петлями

scanf("%s",&name[spots]); 
     ^you don't need to use & 

А также в цикле for использование x <= spots как петля состояние.

+0

Так что, если я не объявляю число вместо пятен, он автоматически влияет на результаты других массивов в конец . Но я просто изменил его на «scanf» («% c», & answer) вместо того, чтобы оставлять пробел и выглядит preety nice> ** thanks ** – ehem

+0

@ehem Хм, вы используете 'getchar()', чтобы вы не нужно пространство после '% c'. – ameyCU

+0

Большое спасибо Я просто пробовал это без getchar(), используя пробелы. Is getchar() тяжелее, чем пробелы? – ehem

0

Ваш код в порядке. Там всего несколько ошибок. 1. инициализировать массив письменно static int grade[ ] ... 2.Remove getchar до if(answer == 'n') заявление. 3. Условие для цикла должно быть x <= spots. Именно по этой причине, если вы введете 2 студенческих имени, он печатает имя/запись только одного ученика. Надеюсь, что это помогло :)

+0

thank вы очень много. 1/но статический int во всех int-вещах. 2/why static? – ehem

+0

static инициализирует все элементы массива на 0. Он должен работать как со статическими, так и с печатью мусора вместо класса, когда Я удалил статический файл. Если он отлично работает с вашим компилятором, тогда нет необходимости статизировать его. –

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