Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 18
1

Перестановка верхней и нижней строки в структуре

26.10.2016, 13:02. Показов 1891. Ответов 9
Метки нет (Все метки)

Привет. Я вам тут покушать принес. В массиве структур нужно поменять местами верхнюю и нижнюю строки.
Вот весь код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#define _CRT_SECURE_NO_WARNINGS
#define _CRT_NONSTDC_NO_WARNINGS
 
#include <stdio.h>
#include <conio.h>
#include <locale>
#include <Windows.h>
 
void main() {
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    size_t length;
    struct date {
        char day;
        char month;
        short year;
    };
    struct newspapers{
        char name[25];
        short number;
        struct date date1;
        char printingOffice[25];
    };
    struct newspapers newspaperslist[3];
    for (int i = 0; i<2; i++){
        printf("Введите название газеты %d: ", i+1);
        fgets(newspaperslist[i].name, sizeof newspaperslist[i].name, stdin);
 
        printf("Введите номер выпуска %d: ", i+1);
        scanf("%d", &newspaperslist[i].number);
        
        printf("Ввод даты выпуска %d \n", i+1);
        printf("Введите день: ");
        scanf("%d", &newspaperslist[i].date1.day);
        printf("Введите месяц: ");
        scanf("%d", &newspaperslist[i].date1.month);
        printf("Введите год: ");
        scanf("%d", &newspaperslist[i].date1.year);
 
        printf("Введите издательство %d: ", i+1);
        getchar();
        fgets(newspaperslist[i].printingOffice, sizeof newspaperslist[i].printingOffice, stdin);
    }
    newspaperslist[3] = newspaperslist[2];
    newspaperslist[2] = newspaperslist[1];
    newspaperslist[1] = newspaperslist[3];
 
    printf("_______________________________________________________________\n");
    printf("|          Газеты            |                |                |\n");
    printf("|____________________________|  Дата выпуска  |  Издательство  |\n");
    printf("|    Название     |  Номер   |                |                |\n");
    printf("|-----------------|----------|----------------|----------------|\n");
    for (int i = 0; i<2; i++) {
        length = strlen(newspaperslist[i].name);
        if (length > 0 && newspaperslist[i].name[length - 1] == '\n')
            newspaperslist[i].name[length - 1] = '\0';
 
        length = strlen(newspaperslist[i].printingOffice);
        if (length > 0 && newspaperslist[i].printingOffice[length - 1] == '\n')
            newspaperslist[i].printingOffice[length - 1] = '\0';
 
        printf("| %-15s ", newspaperslist[i].name);
        printf("| %-8d ", newspaperslist[i].number);
        printf("| %2d.%2d.%4d     ", newspaperslist[i].date1.day, newspaperslist[i].date1.month, newspaperslist[i].date1.year);
        printf("| %-15s|\n", newspaperslist[i].printingOffice);
    }
    printf("|--------------------------------------------------------------|");
    getch();
}
Вот моя гениальная реализация перестановки строк:
C
1
2
3
newspaperslist[3] = newspaperslist[2];
newspaperslist[2] = newspaperslist[1];
newspaperslist[1] = newspaperslist[3];
В консоли вот такая штука
Перестановка верхней и нижней строки в структуре


Заранее спасибо
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2016, 13:02
Ответы с готовыми решениями:

Проверить существует ли связь через единицы от верхней строки массива до нижней
заполнить массив 5х5 единицами и нулями в случайном порядке и проверить существует ли связь через...

Сделать шахматную доску, в которой цвета ячеек будут плавно изменяться от верхней строки до нижней
Нужно в матлабе сделать шахматную доску, в которой цвета ячеек будут плавно изменяться от верхней...

Строки верхней половины матрицы поменять местами со строками нижней половины
Дан двумерный массив из четного числа строк. Строки верхней половины массива поменять местами со...

Строки верхней половины массива поменять местами со строками нижней половины
Дан двухмерный массив из четного числа строк. Строки верхней половины массива поменять местами со...

9
1782 / 1032 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
26.10.2016, 13:12 2
Keyrillanskiy,
C
1
2
3
4
struct newspapers tmp;
tmp = newspaperslist[1];
newspaperslist[1] = newspaperslist[3];
newspaperslist[3] = tmp;
0
0 / 0 / 0
Регистрация: 25.10.2016
Сообщений: 18
26.10.2016, 13:57  [ТС] 3
Не помогло, выдает то же самое(
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
26.10.2016, 14:15 4
Keyrillanskiy, структуры нельзя копировать, можно копировать их только по элементам структуры, если это не вложенная структура. Можешь конечно поменять адреса в массиве адресов на структуры, если тебе просто нужно отсортировать как то, но делается это, конечно, с помощью временной ячейки памяти, либо же с помощью логических операций, но первый вариант будет легче понять. Даже если бы и можно было копировать структуры, в твоем примере newspaperslist[3] затерся бы вот этим newspaperslist[2], и пропал бы бесследно.
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
26.10.2016, 14:48 5
Цитата Сообщение от Novi4ekC Посмотреть сообщение
Keyrillanskiy, структуры нельзя копировать, можно копировать их только по элементам структуры, если это не вложенная структура.
"Современный язык С позволяет присваивать одну структуру другой — то, чего нельзя делать с массивами.
То есть, если n_data и o_data — структуры того же типа, то можно записать следующий код:
C
1
o_data = n_data; // присваивание одной структуры другой
Это приводит к тому, что каждому члену n_da ta присваивается значение соответствующего
члена o_da ta. Это работает, даже если член оказывается массивом."
Стивен Прата." Язык программирования Си."
0
81 / 81 / 33
Регистрация: 03.03.2013
Сообщений: 311
26.10.2016, 15:44 6
Цитата Сообщение от LFC Посмотреть сообщение
Стивен Прата." Язык программирования Си."
какое издание?

Добавлено через 12 минут
И где этот стандарт уже применяли?
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
26.10.2016, 16:20 7
Цитата Сообщение от Novi4ekC Посмотреть сообщение
какое издание?
6-е
Цитата Сообщение от Novi4ekC Посмотреть сообщение
И где этот стандарт уже применяли?
хех,смешно ему)))
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
struct book
{
    char title[40];
    char author[30];
    int numlist;
};
int main()
{
    struct book fursov, bulgakov;
    strcpy(bulgakov.title,"Teatralniy roman.");
    strcpy(bulgakov.author, "Bulgakov M.A.");
    bulgakov.numlist = 560;
    printf("%s %s %d\n", bulgakov.title, bulgakov.author, bulgakov.numlist);
    strcpy(fursov.author, "Fursov A.I.");
    strcpy(fursov.title, "Corporatocratia.");
    fursov.numlist = 200;
    printf("%s %s %d\n", fursov.title, fursov.author, fursov.numlist);
    fursov = bulgakov;
    printf("assignment structure:%s %s %d\n", fursov.title, fursov.author, fursov.numlist);
    return 0;
}
Novi4ekC, следите внимательно за строкой 20
1
Миниатюры
Перестановка верхней и нижней строки в структуре  
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11031 / 6983 / 1651
Регистрация: 25.07.2009
Сообщений: 12,727
26.10.2016, 16:42 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Novi4ekC Посмотреть сообщение
структуры нельзя копировать
Это кто Вам такую глупость сказал?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
struct ARRAY {
    int arr[3];
};
 
void dump(const struct ARRAY * obj) {
    int i;
    
    for ( i = 0; i < 3; ++i )
        printf("%d ", obj->arr[i]);
    printf("\n");
}
 
int main(void) {
    struct ARRAY a = { .arr = { 1, 2, 3 } }, b = { .arr = { 9, 8, 7 } }, tmp;
    
    dump(&a);
    dump(&b);
    
    tmp = a;
    a = b;
    b = tmp;
    
    dump(&a);
    dump(&b);
    
    return 0;
}
Перестановка верхней и нижней строки в структуре


Keyrillanskiy, да подождите Вы с перестановками, попробуйте просто значения ввести, а потом всё вывести...
0
1782 / 1032 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
26.10.2016, 16:47 9
Цитата Сообщение от Novi4ekC Посмотреть сообщение
И где этот стандарт уже применяли?
Novi4ekC, с 1989 года, вроде как, применяли
0
С чаем беда...
Эксперт CЭксперт С++
9137 / 4656 / 1267
Регистрация: 18.10.2014
Сообщений: 10,505
26.10.2016, 17:36 10
Лучший ответ Сообщение было отмечено Keyrillanskiy как решение

Решение

Цитата Сообщение от Keyrillanskiy Посмотреть сообщение
struct newspapers newspaperslist[3];
Как и в предыдущем варианте, в объявили массив размера 3 (индексы от 0 до 2), после чего лезете в элемент newspaperslist[3], которого не существует.

Добавлено через 1 минуту
Цитата Сообщение от Novi4ekC Посмотреть сообщение
И где этот стандарт уже применяли?
Структуры в языке С можно спокойно копировать (присваивать) с самого момента повления стандартизированного языка С, т.е. с 1989 года. Шутка с некопируемыми струкутрами отностся к категории "это было давно и неправда". (Да, когда-то так было, но только когда все еще не динозаврах на работу ездили.)
3
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2016, 17:36

Строки верхней половины матрицы поменять местами со строками нижней половины
Дан двумерный массив из четного числа строк и столбцов а) строки верхней половины поменять местами...

Строки верхней половины массива поменять местами со строками нижней половины
Недавно начал изучать Java. Помогите с заданием пожалуйста. Нужно строки верхней половины...

Поменять местами строки верхней половины ступенчатого массива со строками нижней половины
дан ступенчатый массив с четным количеством строк, нужно строки верхней половины массива поменять...

Доказать утверждения о верхней и нижней грани
Доказать, что сходящаяся числовая последовательность достигает либо своей нижней либо своей верхней...

Решение СЛАУ методом верхней и нижней релаксации
Помогите пожалуйста только основную программу пожалуйста СПАСИБО

Работа с DateTime: поиск верхней и нижней недели
Здравствуйте. Подскажите, как реализовать следующую задачу: Первая неделя сентября считается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.