Ошибка l-value - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Хочу сделать функцию, которая будет сортировать вывод строк, вот такую вот соченил:
void choose_2(unsigned char ar[][COLS], int rows)
{
    int i, j;
    char *buf;
    for(i = 0; i < rows ; ++i)
        for(j = i; j < rows; ++j)
            if(strcmp(*(ar + i),*(ar + j)) > 0 )
            {
                buf = ar[i];
                ar[i] = ar[j];
                ar[j] = buf; 
            }
}
Выдает ar[i] = ar[j]; ar[j] = buf; в этих вот местах, что перед = должно быть значение "l-value". Суть ошибки я понимаю, проблема в том, что начал просматривать, как сортировка сделана в книге Cтивена Прата, и обнаружил, что очень похоже, в частности такие выражения, в которых у меня ошибки там присутствуют.
в первом цикле нужно добавить "i < rows - 1", во втором цикле for нужно добавить "j = i + 1", но суть от этого не изменяется

Решение задачи: «Ошибка l-value»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
#define ROWS 10
#define COLS 40
void get_ap_to_ten(unsigned char ar[][COLS]);
void choose_2(unsigned char ar[][COLS], int rows);
int main()
{
    int i;
    unsigned char string[ROWS][COLS] = {0};
 
    get_ap_to_ten(string);
    choose_2(string, ROWS);
    for(i = 0; i < ROWS ;i++)
        fputs(string[i], stdout);
    
}
void get_ap_to_ten(unsigned char ar[][COLS]) 
{
    int i;
    puts("Enter up to 10 strings:");
 
    for(i = 0; i < ROWS && fgets(ar[i],COLS,stdin) != NULL ; ++i)
        ;
}
void choose_2(unsigned char ar[][COLS], int rows)
{
    int i, j;
    unsigned char *buf;
    for(i = 0; i < rows ; ++i)
        for(j = i; j < rows; ++j)
            if(strcmp(*(ar + i),*(ar + j)) > 0 )
            {
                buf = ar[i];
                ar[i] = ar[j];
                ar[j] = buf; 
            }
}

Объяснение кода листинга программы

  1. В коде используется язык программирования C.
  2. Код содержит две функции: get_ap_to_ten и choose_2.
  3. get_ap_to_ten принимает двумерный массив ar размером ROWS на COLS и просит пользователя ввести до 10 строк.
  4. choose_2 принимает двумерный массив ar размером ROWS на COLS и количество строк rows.
  5. В функции main создается двумерный массив string размером ROWS на COLS и инициализируется значением 0.
  6. В функции main вызывается функция get_ap_to_ten, которая заполняет массив string строками, введенными пользователем.
  7. В функции main вызывается функция choose_2, которая сортирует массив string в порядке возрастания.
  8. В функции main выводится содержимое массива string на экран.
  9. В функции get_ap_to_ten используется цикл for, который продолжается, пока пользователь вводит строки и не нажимает кнопку Enter.
  10. В функции choose_2 используется два вложенных цикла for, который сортирует строки в массиве ar по возрастанию.
  11. В функции choose_2 используется функция strcmp, которая сравнивает две строки.
  12. Если строка ar[i] больше строки ar[j], то строки меняются местами с помощью указателей buf, ar[i] и ar[j].
  13. В функции main используется цикл for, который выводит содержимое массива string на экран.
  14. В функции main не обрабатывается ошибка, возникающая при попытке чтения строки, длина которой превышает размер буфера.
  15. В функции main не обрабатывается ошибка, возникающая при попытке сортировки массива, содержащего строки разной длины.
  16. В функции main не обрабатывается ошибка, возникающая при попытке записи строки в файл, открытый в режиме вывода.
  17. В функции main не обрабатывается ошибка, возникающая при попытке чтения строки, когда пользователь вводит символ новой строки без кавычек.
  18. В функции main не обрабатывается ошибка, возникающая при попытке сортировки массива, содержащего строки, не являющиеся строками ASCII.
  19. В функции main не обрабатывается ошибка, возникающая при попытке сортировки массива, содержащего строки, содержащие символы, не являющиеся буквами или цифрами.
  20. В функции main не обрабатывается ошибка, возникающая при попытке сортировки массива, содержащего строки, содержащие специальные символы, например, символы управления или символы из национальных алфавитов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.5 из 5