Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Lille Maya
3 / 3 / 0
Регистрация: 11.09.2015
Сообщений: 96
1

Вводя слово (англ или рус), найти перевод или выдать сообщение "нет в словаре"

22.05.2016, 09:10. Просмотров 834. Ответов 4
Метки нет (Все метки)

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

Вот код.

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
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
struct word
{
    //слово
    char current_word[20];
    // перевод
    char translation[20];
};
 
void main()
{
    setlocale(LC_ALL, "Russian");
    struct word words[100];
    char search_world[20];
    int n = 0;
    printf("Введите количество слов:");
    scanf_s("%d", &n);
 
    // составляем словарь
    for (int i = 0; i < n; i++)
    {
        printf("Введите слово:\n");
        gets_s(words[i].current_word);
        printf("Введите перевод:\n");
        gets_s(words[i].translation);
    }
    // Выводим словарь
    for (int i = 0; i < n; i++)
    {
        printf("\nСлово: %s", words[i].current_word);
        printf("\nПеревод: %s", words[i].translation);
    }
    printf("\n");
    printf("Введите слово для поиска перевода: ", &search_world);
    gets_s(search_world);
 
    int k = 0;
    for (int i = 0; i < n; i++)
    {
        if (strcmp(words[i].current_word, search_world) == 0)
        {
            printf("%s", words[i].translation);
            break;
        }
        k++;
        if (k == n - 1) {
            printf("Перевод ");
        }
    }
 
    _getch();
}
Но далее нужно было дополнить ее заполнением и обработкой файлов. Имя файла вводить с клавиатуры в процессе работы программы. И тут то и начались проблемы.

Вот код

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
71
72
73
74
75
76
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
#include <conio.h>
#include <locale.h>
#include <string.h>
#include <cstring>
 
 
struct sl
{
    //слово
    char word[20];
    // перевод
    char perevod[20];
};
 
void main()
{
    setlocale(LC_ALL, "Russian");
    struct sl w[100];
    char s_w[20];
    char slovar[20][20];
    char t[200];
    char fname[15];
    int n = 0;
    FILE*f1;
    scanf("%s", fname);
    f1 = fopen(fname, "r");
    fscanf(f1, "%s", &t);/*
                         printf("Введите количество слов:");
                         scanf("%d", &n);
                         */
    char sm = ' ';
    int i = 0, j = 0, k = 0;
    while (t[i] != '\0')
    {
 
        if (t[i] != ':')
        {
            slovar[j][k] = t[i];
        }
        else
        {
            slovar[j][k] = '\0';
            j++;
 
            k = -1;
 
        }
        i++;
        k++;
 
    }
    n = j;
 
 
    printf("Введите слово для поиска перевода: ");
    scanf("%s", &s_w);
    k = 0;
    for (int i = 0; i < n; i++)
    {
        if (i % 2 == 0 && strcmp(slovar[i], s_w) == 0)
        {
            printf("Перевод : %s", slovar[i + 1]);
            break;
        }
 
        if (k == n - 1) {
            printf("Нет слова в словаре");
        }
        k++;
    }
    fclose(f1);
    _getch();
}
Программа запускается, но пустая и при каких либо действиях начинается виснуть.
Не пойму как заставить ее работать
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2016, 09:10
Ответы с готовыми решениями:

Ввести слово, найти перевод или выдать сообщение «нет в словаре»
Подсобите) Сформировать запись «английское слово-перевод». Вводя слово...

Проверить каким является число "составным" или "простым" (найти и исправить ошибки в коде)
В чем ошибка? Мне нужно ввести число и программа должна указать каким является...

Если х равно одному из чисел N!/1, N!/2, N!/3, ...,N!/N, то вывести на экран сообщение "Да", иначе - сообщение "Нет"
Даны натуральные числа х и N(x&gt;N). Если х равно одному из чисел N!/1, N!/2,...

Записать все числа из файла после знака "=" и "," в переменные или одномерный массив
Есть входной файл input.txt вида: TRIANGLE: P1=100,100; P2=200,200; P3=150,...

Написать программу которая подсчитывает количество слов, начинающихся с буквы "к" или "К", в тексте
помогите, пожалуйста написать программу которая подсчитывает количество...

4
McFair
7 / 7 / 7
Регистрация: 25.01.2016
Сообщений: 37
22.05.2016, 10:15 2
Посмотри сюда.
C
1
2
3
4
5
6
7
8
9
 FILE*f1=NULL;
    scanf("%s", &fname);
    f1 = fopen(fname, "r");
    if(f1==NULL){
        printf("Error fopen");
        return -1;
    }
    //fname[strlen(fname)]='\0';
    fscanf(f1, "%s", &t);
При вводе файла нужно передавать адрес куда заносишь имя файла от пользователя, и дополнительно проверяй открыт ли файл чтобы избежать досадных недоразумений, а так код вполне себе рабочий.
1
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
22.05.2016, 10:44 3
Lille Maya, у вас же было задание со списком. создавайте список структур слов-переводов и с ним работайте, а не с этим бардаком
Цитата Сообщение от Lille Maya Посмотреть сообщение
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
    struct sl w[100];
    char s_w[20];
    char slovar[20][20];
    char t[200];
...
    char sm = ' ';
    int i = 0, j = 0, k = 0;
    while (t[i] != '\0')
    {
 
        if (t[i] != ':')
        {
            slovar[j][k] = t[i];
        }
        else
        {
            slovar[j][k] = '\0';
            j++;
 
            k = -1;
 
        }
        i++;
        k++;
 
    }
    n = j;
к тому же полное чтение файла не реализовано
0
McFair
7 / 7 / 7
Регистрация: 25.01.2016
Сообщений: 37
22.05.2016, 10:56 4
retmas, Зачем же так резко? Бардаком..Если человек еще не совсем разбирается во всем почему бы ему не начать с простых вещей , как сейчас это сделано у него, лучше начать с низов чтобы все понимать а не верха. Можно было в более адекватной форме порекомендовать работать со списками.
0
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
22.05.2016, 14:53 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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

Добавлено через 2 часа 16 минут
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXWORDSIZE 20
 
typedef struct dict_data
{
    char native[MAXWORDSIZE];
    char transl[MAXWORDSIZE];
} dict_data_t;
 
typedef struct list_node
{
    struct list_node* next;
    dict_data_t value;
} list_node_t;
 
list_node_t* node_create(const dict_data_t* x)
{
    list_node_t* ret = (list_node_t*)malloc(sizeof(list_node_t));
    if(ret)
    {
        strcpy(ret->value.native, x->native);
        strcpy(ret->value.transl, x->transl);
        ret->next = NULL;
    }
    return ret;
}
 
typedef struct list
{
    list_node_t* head;
    list_node_t* tail;
} list_t;
 
void list_init(list_t* l)
{
    l->head = NULL;
    l->tail = NULL;
}
 
void list_destroy(list_t* l)
{
    list_node_t* cur;
    while((cur = l->head))
    {
        l->head = cur->next;
        free(cur);
    }
}
 
void list_push_back(list_t* l, const dict_data_t* x)
{
    list_node_t* n = node_create(x);
    if(!l->head)
        l->head = l->tail = n;
    else
    {
        l->tail->next = n;
        l->tail = n;        
    }
}
 
void list_find_tr_fill(list_t* l, dict_data_t* x)
{
    list_node_t* ret = l->head;
    for(; ret; ret = ret->next)
    {
        if(strcmp(ret->value.native, x->native) == 0)
        {
            strcpy(x->transl, ret->value.transl);
            return;
        }
    }
    x->transl[0] = '\0';
}
 
int main()
{
    list_t       dictionary;
    dict_data_t  temp_data;
    list_node_t* cur;
    FILE*        fp;
    
    fp = fopen("input", "r");
    if(!fp)
    {
        perror("input");
        exit(EXIT_FAILURE);
    }
    
    list_init(&dictionary);
    /* 
     * считаю, что формат файла такой:
     *    слово : перевод
     *    слово : перевод
     *    ...
    */
    while(fscanf(fp, " %[^: ] %*[:] %s", temp_data.native, temp_data.transl) > 0)
        list_push_back(&dictionary, &temp_data);
    fclose(fp);
    
    puts("Значения в словаре:");
    for(cur = dictionary.head; cur; cur = cur->next)
        printf("%s : %s\n", cur->value.native, cur->value.transl);
    
    printf("Введите слово для поиска перевода: ");
    scanf("%s", temp_data.native);
    list_find_tr_fill(&dictionary, &temp_data);
    printf("Перевод: %s\n", temp_data.transl);
    
    list_destroy(&dictionary);
    return 0; 
}
0
22.05.2016, 14:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2016, 14:53

Удалить все слова, оканчивающиеся группой букв "кая" или "кое"
Удалить из S1,... Sn все слова, оканчивающиеся группой букв, &quot;кая&quot; или &quot;кое&quot;....

Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день" или "Сегодня выходной"
Написать программу, которая запрашивает у пользователя номер дня недели и...

Нахождение "отражений" в заданном словаре
Нахождение &quot;отражений&quot; в заданном словаре. В задании - вывод результатов на...


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

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

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