Отсортируйте массив по алфавиту c фамилий учащихся. - PullRequest
0 голосов
/ 30 мая 2020

Отсортируйте массив в соответствии с алфавитным c порядком фамилий учащихся и распечатайте массив на консоли.

Но код не отображается вывод правильно, почему?

Если я даю ввод. Предположим,

ввод:

Enter the value of number: 2
Please enter the name of the student:
Nihan ahmed

вывод:

After sorting the array:
Nihan ahmed

Почему может 'Разве я не ввожу более одного имени?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
void main()
{   
    char name[10][8], temp[8];
    int i,j,n,L,k;
    printf("Enter the value of number:\n");
    scanf("%d", &n);
    fflush(stdin);
    printf("\n");
    printf("Please enter the name of the student:\n");
    for(i=0;i<n;i++)
    {
        gets(name[i]);
    }
    for(i=0;i<n-1;i++)
    {
        k=0;
        while(1)
        {
            ++k;
            if(name[i][k]==' ')
            break;
        }
        for(j=i+1;j<n;j++)
        {
           L=0;
           while(1)
           {
               ++L;
               if(name[j][L]==' ')
               break;
           }
            if(name[i][k+1]>name[j][L+1])
            {
               strcpy(temp,name[i]);
               strcpy(name[i],name[j]);
               strcpy(name[j],temp);
            }
        }
    }
    printf("After sorting the array:\n");
    for(i=0;i<n;i++)
    {
        puts(name[i]);
    }
    return 0;
}

Ответы [ 2 ]

1 голос
/ 30 мая 2020

вы читаете n раз в соответствии с этим l oop:

for(i=0;i<n;i++)
{
   gets(name[i]);
}

то, что делает этот l oop, - это чтение 10 слов, когда вы пишете nihan ahmed, вы сохраняете имя из двух строк [0] содержит нисан, а имя [1] содержит в себе Ахмеда

что вам нужно сделать (если вы не знакомы со структурами, которые кажутся похожими):

for(i=0;i<2*n;i++)
{
   printf ("\n please enter the name of the student number %d: ", i);
   gets(name[i]);
}
0 голосов
/ 30 мая 2020

Здесь: gets(name[i]); имеет некоторые ограничения, связанные с получением данных от пользователя. Советую использовать scanf(" %s", name[i]). В вашем коде, если вы поместите печать в

for(i=0;i<n;i++)
{
    printf("%d \n", i);
    gets(name[i]);
}

OUTPUT:
Enter the value of number:
2

Please enter the name of the student:
0 
1 
hello
After sorting the array:

hello

, вы обнаружите, что 0, 1 печать будет приходить за раз в позиции 0 -> (ждать ввода) -> 1 -> (ждать ввода ).

если вы используете scanf в качестве подставки, код работает должным образом. пожалуйста, измените код получения l oop на:

for(i=0;i<n;i++)
{
    scanf("%s",name[i]);
}

OUTPUT:
Enter the value of number:
2

Please enter the name of the student:
hello 
abcd
After sorting the array:
hello
abcd
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...