Форум программистов, компьютерный форум, киберфорум
Наши страницы

C для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Savelia
1 / 1 / 1
Регистрация: 22.11.2010
Сообщений: 42
#1

Вывести на экран те фамилии, которые оканчиваются на заданную букву - C (СИ)

25.01.2011, 21:53. Просмотров 763. Ответов 15
Метки нет (Все метки)

Подскажите, где по коду ошибка, нужно создать структуру ФИО, и вывести на экран те фамилии, которые оканчиваются на заданную букву

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
typedef struct fio
    {
        char family[25];
        char imya[25];
        char otchestvo[25];
}Fio;
 
void main(void)
{
    Fio *mass;
    int size;
    int i;
    char ch;
 
    
    // Вводим количество записей
    printf("\nVvedite kolichestvo zapisey -> ");
    scanf("%d", &size);
    mass = (Fio*)calloc(size, sizeof(Fio));
 
    // Заполняем поля
    for(i=0; i<size; i++) {
        printf("\nVvedite familiu -> ");
        scanf("%s", &mass[i].family);
        printf("\nVvedite imya -> ");
        scanf("%s", &mass[i].imya);
        printf("\nVvedite otchestvo -> ");
        scanf("%s", &mass[i].otchestvo);
    }
    // Выводим записи на экран
    printf("\nIshodnaya tablitcha --> \n\n");
 
    for(i=0; i<size; i++) {
        printf("%s ", mass[i].family);
        printf("%s ", mass[i].imya);
        printf("%s ", mass[i].otchestvo);
        printf("\n\n");
    }
    
    
    printf("\nVvedite bukvu --> ");
    scanf("%s", &ch);
    int pr=-1;
    
    printf("\nNovaya tablitcha :\n\n");
    for(i=0; i<size; i++) {
        if (mass[i].family[strlen(mass[i].family)-1]==ch) 
        {
            pr=1;
            printf("\n%s %s %s", mass[i].family, mass[i].imya, mass[i].otchestvo);
            printf("\n");
        }
    }
 
    if (pr==-1) { 
        printf("\nFamiliy okanchivaushihsya na dannuu bukvu <<%s>> net!!!", ch);
    }
 
    free(mass);
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2011, 21:53
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывести на экран те фамилии, которые оканчиваются на заданную букву (C (СИ)):

Найти и напечатать все слова, которые оканчиваются на заданную букву - C (СИ)
Подскажите, что упустил. Не могу понять, поч не работает. Дана символьная строка, в которой слова перечислены через точку с запятой, а...

Найти число слов, которые оканчиваются той же буквой, что и последнее слово. Вывести их на экран - C (СИ)
Дана строка длиной n символов, содержащая слова, т.е. группы символов, разделенные пробелами и другими разделителями (знаками ...

Даны натуральные числа от 1 до 33. Вывести на экран эти числа, кроме тех, которые делятся или оканчиваются на три - C (СИ)
Даны натуральные числа от 1 до 33. Вывести на экран эти числа, кроме тех, которые делятся на три или оканчиваются на три.

Ввести строку и букву, вывести только слова, заканчивающиеся на заданную букву - C (СИ)
Помогите пожалуйста написать программу, нужно ввести строку и букву, вывести только слова, заканчивающиеся на заданную букву.

Сформировать новую строку из слов, которые оканчиваются на последнюю букву последнего слова - C (СИ)
Была дано задание: Неиспользуя строковые функции, сформировать новую строку из слов, которые оканчиваются на последнюю букву последнего...

Скопировать в новый файл те строки исходного, которые начинаются и оканчиваются на одну и ту же букву - C (СИ)
Доброго времени суток. Помогите решить задание. 1)Программа на СИ должна создавать папку temp в которой пользователь создает файл 1.txt с...

15
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 159
25.01.2011, 22:02 #2
Цитата Сообщение от Savelia Посмотреть сообщение
C++
1
2
for(i=0; i<size; i++) {
    if (mass[i].family[strlen(mass[i].family)-1]==ch)
Начинайте цикл не с 0, а с единицы, потому что выходите за рамки массива.
0
HighPredator
5645 / 1962 / 373
Регистрация: 10.12.2010
Сообщений: 5,686
Записей в блоге: 3
25.01.2011, 22:05 #3
Путем выхода в астрал узнал что программа выдает неверный результат... Щас посмотрим...
0
Savelia
1 / 1 / 1
Регистрация: 22.11.2010
Сообщений: 42
25.01.2011, 22:08  [ТС] #4
Цитата Сообщение от VenCarbon Посмотреть сообщение
Начинайте цикл не с 0, а с единицы, потому что выходите за рамки массива.
все равно не работает
0
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 159
25.01.2011, 22:11 #5
а что за ошибку-то выдает?

> все равно не работает
потому что я ступила.) это не решение.
0
Savelia
1 / 1 / 1
Регистрация: 22.11.2010
Сообщений: 42
25.01.2011, 22:18  [ТС] #6
Цитата Сообщение от VenCarbon Посмотреть сообщение
а что за ошибку-то выдает?
ничего не выдает, последнее, что появляется на экране
новая таблица -->
и пишет прекращена работа программы

Добавлено через 5 минут
Пишет Run-Time Check Failur #2 - Stack around the variable 'ch' was corrupted
0
HighPredator
5645 / 1962 / 373
Регистрация: 10.12.2010
Сообщений: 5,686
Записей в блоге: 3
25.01.2011, 22:24 #7
В общем так: программа работает верно. (выяснено с помощью отладчика) Попробую сообразить почему стек летит...
1
Savelia
1 / 1 / 1
Регистрация: 22.11.2010
Сообщений: 42
25.01.2011, 22:25  [ТС] #8
Цитата Сообщение от Predator_2004 Посмотреть сообщение
В общем так: программа работает верно. (выяснено с помощью отладчика) Попробую сообразить почему стек летит...
спасибо, жду
0
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 159
25.01.2011, 22:26 #9
Цитата Сообщение от Savelia Посмотреть сообщение
scanf("%s", &ch);
ch - вроде как char у вас... в смысле не является строкой. может попробовать написать так:
scanf("%c", &ch)
?
1
Savelia
1 / 1 / 1
Регистрация: 22.11.2010
Сообщений: 42
25.01.2011, 22:38  [ТС] #10
Цитата Сообщение от VenCarbon Посмотреть сообщение
ch - вроде как char у вас... в смысле не является строкой. может попробовать написать так:
scanf("%c", &ch)
?
почему то работает, только если поставить пробел перед %
scanf(" %c", &ch)
0
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 159
25.01.2011, 22:40 #11
а траблы со стэком все так же и остались?
0
HighPredator
5645 / 1962 / 373
Регистрация: 10.12.2010
Сообщений: 5,686
Записей в блоге: 3
25.01.2011, 22:48 #12
Цитата Сообщение от Savelia Посмотреть сообщение
почему то работает, только если поставить пробел перед %
scanf(" %c", &ch)
Действительно... Но почему честно не представляю. Нужно звать гуру, а то жутко интересно)

Добавлено через 33 секунды
Нет не летит что самое смешное, но только с пробелом))
0
Savelia
1 / 1 / 1
Регистрация: 22.11.2010
Сообщений: 42
25.01.2011, 23:31  [ТС] #13
Цитата Сообщение от Predator_2004 Посмотреть сообщение
Действительно... Но почему честно не представляю. Нужно звать гуру, а то жутко интересно)

Добавлено через 33 секунды
Нет не летит что самое смешное, но только с пробелом))
мне бы тоже интересно узнать, почему работает только с пробелом????????
0
HighPredator
5645 / 1962 / 373
Регистрация: 10.12.2010
Сообщений: 5,686
Записей в блоге: 3
25.01.2011, 23:41 #14
C++
1
2
printf("\nVvedite bukvu --> ");
        scanf(" %s", &ch);
Есть предположение следующего рода: в строчке 1 выводится строка, имеющая нуль-терминатор на конце, соответственно при прочтении символа со спецификатором строки формально читается строка имеющая перед собой этот символ. Отсюда и повреждение стека. Многим может показаться такое объяснение ерундой, но в его пользу говорит один факт: если читать символ со спецификатором %c то программа "как-бы не ждет ввода" и идет дальше. Это вероятно только в случае, если она получила на вход тот нуль-терминатор и, довольная, поехала дальше. Если неправ - поправьте, ибо с такими тонкостями си не знаком.
0
VenCarbon
33 / 32 / 3
Регистрация: 14.12.2010
Сообщений: 159
26.01.2011, 00:24 #15
имо, ответ один: ПОТОМУ ЧТО.

у меня с С тоже какое-то траблы были, когда нужно было сортировку массива засунуть в функцию... в одном компиляторе не шло, в другом - все как по маслу... при чем код не меняли ВООБЩЕ. охх... не люблю я этот С...
0
26.01.2011, 00:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2011, 00:24
Привет! Вот еще темы с ответами:

Подсчитать количество пустых строк и строк, которые начинаются и оканчиваются на одну и ту же букву - C (СИ)
Привет всем!!! Пожалуйста, помогите с программой. Сама программа есть, но к каждой строчки надо дописать коментарии и еще надо, чтобы...

Подсчет количества слов в строке, которые начинаются на заданную букву. - C (СИ)
Напишите программу, которая подсчитывает количество слов в строке, которые начинаются на заданную букву.

Найти и напечатать все слова, которые содержат в себе заданную букву - C (СИ)
Дано предложение, в котором слова разделены запятой или пробелом, а общая длина &lt;= 80. Найти и напечатать все слова, которые содержат в...

Дана строка. Найти слова, которые начинаются заканчиваются на букву, заданную пользователем - C (СИ)
Первое и второе слово проверяет верно, а когда доходит цикл до третьего слова и дальше, то не проверяет их. Не пойму почему. Объясните,...


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

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

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