2016-05-04 2 views
-1

У меня есть этот код в моем компьютере книге:Сортировка наименований В C

#include<stdio.h> 
#include<conio.h> 
#include<string.h> 
void main(void) 
{ 
    clrscr(); 
    char list[10][20],name[20]; 
    int i,j; 
    for(i=0;i<10;i++) 
    { 
     printf("\nEnter the Name of Student %d",i+1); 
     gets(&list[i][0]); 
    } 
    for(i=0;i<10-1;i++) 
     for(j=0;j<10-1;j++) 
      if(strcmp(&list[j][0],&list[j+1][0])>0) 
      { 
       strcpy(name,&list[j][0]); 
       strcpy(&list[j][0],&list[j+1][0]); 
       strcpy(&list[j+1][0],name); 
      } 
    printf("\nThe Sorted Name List is :"); 
    for(i=0;i<10;i++) 
     printf("\n%s",&list[i][0]); 
    getche(); 
} 

Я хотел бы знать, почему «список» массива объявлен как список [10] [20], но, когда он используется для хранения имен, которые он использует только 1 цикл, т. е. только i, а второй индекс или индекс всегда остаются нулевыми, пока в декларации 20?

+2

если код действительно содержит 'gets()', время, чтобы получить лучшую книгу ... действительно ... –

+0

Пожалуйста, открепите свой код. –

+1

hahaha книга «есть» старая, хотя;) – MGB

ответ

2

«list» предназначен для использования в качестве массива строк c, но каждая такая строка сама по себе является массивом char, поэтому вы получаете двумерный массив, где «внешний» размер представляет строки и «внутреннее» dimenstion - массив для хранения строки в (с максимальной длиной 20 символов).

Поскольку get заполняет такую ​​строку, он использует уже все «внутреннее» измерение, поэтому вам нужно только прокрутить «внешнее» измерение.