Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
3 / 3 / 5
Регистрация: 21.10.2012
Сообщений: 182
1

В описании дана программа. Что она делает? Она создает список с полем ключа и полем данных. Что надо сделать? Надо чтобы программа работала бесконечно

19.04.2013, 19:23. Показов 505. Ответов 0
Метки нет (Все метки)

Вообщем нужно чтобы было так:
Vvedite key:
1
Vvedite stroku:
11111
Key=1
Stroka=11111
Vvedite key:
2
Vvedite stroku:
22222
Key=1
Stroka=11111
Key=2
Stroka=22222
И так далее, список очищаться не должен, программа начинает глючить после второго ввода ключа и строки, если не знаете как исправить, подскажите с чем это связано.
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
#include<stdio.h>
#include<malloc.h>
#include<string.h>
 
typedef struct sp
{
int key;
char *c;
struct sp *next;
}sp;
 
char *stroka();
sp *sozdaniespiska();
int printlist();
int deletelist();
 
int main(){
    int k;
    char *ptr;
    sp *head;
    head=NULL;
    while(1){
    printf("Vvedite key:\n");
    scanf("%d",&k);
    printf("Vvedite stroku:\n");
    ptr=stroka();
    head=sozdaniespiska(ptr,k,head);
    printlist(head);
    free(ptr);
    }
    deletelist(head);
    return 0;
}
 
char* stroka()
{   char *stroka, buf[81], symbol;
    int n;
    int len=0;
    len=0;
    getchar();
    n=scanf("%80[^\n]%c",&buf,&symbol);
    stroka=(char*)malloc(sizeof(char));
    *stroka='\0';
    while (n==0)
    {
        printf("Error! You enter void string, please try again:\n");
        getchar();
        n=scanf("%80[^\n]%c",&buf,&symbol);
    }
    if (n<0)
     stroka=NULL;
    else
    {
        do
        {
            len+=strlen(buf);
            stroka=(char*)realloc(stroka, (len+1)*(sizeof(char)));
            strcat(stroka,buf);
            if (symbol != '\n')
            {
                ungetc(symbol,stdin);
                n=scanf("%80[^\n]%c",&buf,&symbol);
            }
            else
            n=0;
        }while (n!=0);
    }
    return stroka;
}
 
sp *sozdaniespiska(char *ptr, int k, sp *head){
    sp *buf, *prev;
        if(head==NULL){
            head=(sp*)malloc(sizeof(sp));
            head->c=ptr;
            head->key=k;
            head->next=NULL;
            prev=head;
        }
        else{
            buf=(sp*)malloc(sizeof(sp));
            buf->c=ptr;
            buf->key=k;
            buf->next=NULL;
            prev->next=buf;
            prev=buf;
            }
        return head;
}
 
int printlist(sp *head){
    sp *p;
    p=head;
    while(p)
    {
        printf("Key=%d\nStroka=%s\n",p->key, p->c);
        p=p->next;
    }
    return 0;
}
 
int deletelist(sp * head){
    sp *p;
    while(head){
        p=head->next;
        free(head);
        head=p;
    }
    return 0;
}
Добавлено через 35 минут
Я упростил программу, но почему-то ключ выводится правильно, а строка выводится каждый раз последняя. Почему?
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
#include<stdio.h>
#include<malloc.h>
#include<string.h>
 
typedef struct sp
{
int key;
char *c;
struct sp *next;
}sp;
 
char *stroka();
sp *sozdaniespiska();
int printlist();
int deletelist();
 
int main(){
    int k;
    char ptr[100];
    sp *head,*buf,*prev;
    head=NULL;
    while(1){
    printf("Vvedite key:\n");
    scanf("%d",&k);
    printf("Vvedite stroku:\n");
    scanf("%s",ptr);
    if(head==NULL){
            head=(sp*)malloc(sizeof(sp));
            head->c=ptr;
            head->key=k;
            head->next=NULL;
            prev=head;
        }
        else{
            buf=(sp*)malloc(sizeof(sp));
            buf->c=ptr;
            buf->key=k;
            buf->next=NULL;
            prev->next=buf;
            prev=buf;
            }
    printlist(head);
    }
    deletelist(head);
    return 0;
}
 
int printlist(sp *head){
    sp *p;
    p=head;
    while(p)
    {
        printf("Key=%d\nStroka=%s\n",p->key, p->c);
        p=p->next;
    }
    return 0;
}
 
int deletelist(sp * head){
    sp *p;
    while(head){
        p=head->next;
        free(head);
        head=p;
    }
    return 0;
}
0

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

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

В описании дана рабочая программа, которая создает список из введенных слов. Дополните ее, чтобы она выводила все эти слова, начиная с первого
Type Ukazatel = ^S; S = Record Data : string; Next : Ukazatel ; End; Var...

Что надо сделать с прогой чтобы она стала сервисом?
Что надо сделать с прогой чтобы она стала сервисом? Скажем как IIS, чтобы логоф из системы не...

Ребятки! Дана программа написана на в Линуксе, скажите что она делает.Буду очень благодарен
https://www.cyberforum.ru/attachment.php?attachmentid=534149&amp;stc=1&amp;d=1432671418

Дан фрагмент программы, надо понять, что она делает
Здравствуйте, дан фрагмент программы, надо понять, что она делает. Пошагово разобралась, что она...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2013, 19:23

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

Запускаю прогу,записываю все,что надо и она ничего больше не делает.(сокеты)
Ошибка не выдается,а просто вечный запрос чего-то. http://pastebin.com/C8KAr9DG вот,что в консоли...

Программа выдает эксепшн, хотя говорят, что она работала под XP
Запускаю EXE - пишет эксепшн EaccessViolation. В Дебагере ришет raised exception class...

процесс когда программа показывает что она делает
подскажите как называется процесс когда мы наш код &quot;компилируем&quot; так, что результатом есть не class...

Что делает эта программа, и на каком языке она написана?
Товарищи, помогите, плз. :help: Что делает ниже написанная программа и на каком языке она...


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

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

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