Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
9 / 9 / 6
Регистрация: 04.12.2011
Сообщений: 137
1

Не работает

27.10.2013, 22:48. Показов 531. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Никак не пойму в чём ошибка. Программа стопорится на самом начале. Не выводится ни 1 printf.
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
#include "stdio.h"
#include "string.h"
#include "stdlib.h"//dl9 exit
#define N 50
 
struct Record{
    char str1[N];
    char str2[N];
    char str3[N];
} *p;
 
void input1();
void input2();
 
int main(){
    p=new struct Record;
  int c=0;
    while (c!=27){
        printf("This program let you add cards of ports and ships\n");
        printf("To add ship card press 1\nIf you want to add port card press 2\n");
        printf("To close program press escape\n");
        if ((c=getchar())==49){//Kod 1
            input1();
        }
        else if (c==50){//Kod 2
            input2();
        }
    }
    delete[] p;
    return 0;
 
}
 
void input1(){
    FILE *f=fopen("ships.dat","ab");
    int c;
    int flag=0;
 
    if (f==NULL){
        perror("Error opening file");
        getchar();
        exit (-1);
    }
 
    while(!flag){
        printf("You are filling information about ship\n\n\n");
 
        printf("Fill-in ship name\n");// Vstavit proverki
        scanf("%s",p->str1);
        printf("Fill-in port of departure\n");
        scanf("%s",p->str2);
        printf("Fill-in arrival port\n");
        scanf("%s",p->str3);
        while (strcmp(p->str2,p->str3)==0){
            printf("Inputed ports must be different. Please input 2nd port again.\n");
            scanf("%s",p->str3);
        }
        fwrite (p, sizeof(struct Record), 1, f);
 
        printf("Return to main menu press escape.\nTo input one more ship card press any key\n");
        if ((c=getchar())==27){
            flag=1;
        }
    }
    fclose(f);
}
 
void input2(){
    FILE *f=fopen("ports.dat","ab");
    int c;
    int flag=0;
 
    if (f==NULL){
        perror("Error opening file");
        getchar();
        exit (-1);
    }
 
    while(!flag){
        printf("You are filling information about port\n\n\n");
 
        printf("Fill-in port name\n");// Vstavit proverki
        scanf("%s",p->str1);
        printf("Fill-in its country\n");
        scanf("%s",p->str2);
        printf("Fill-in its sea\n");
        scanf("%s",p->str3);
 
        fwrite (p, sizeof(struct Record), 1, f);
 
        printf("Return to main menu press escape.\nTo input one more port card press any key\n");
        if ((c=getchar())==27){
            flag=1;
        }
    }
    fclose(f);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2013, 22:48
Ответы с готовыми решениями:

Приложение работает в Debug, странно работает в Release и не работает при билде
Действия выполняются на эмуляторе Pixel 2. Android 9.0. Если я запускаю приложение с конфигурацией...

Мышь работает через раз, то есть запустил ОС - мышь не работает, перезагрузил - мышь работает
Установлена Windows 7 со всеми последними обновлениями. Все всегда замечательно работало. Но с...

Через sublime text 3 и компилятор g++ работает, посоветовали скачать VS, не работает. Миниатюры
через sublime text 3 и компилятор g++ работает, посоветовали скачать VS, не работает.

Не работает изменение, не могу понять почему, Update не работает, ошибку выдает
Помогите, изменение с помощью button string u =...

4
349 / 299 / 166
Регистрация: 15.03.2012
Сообщений: 653
Записей в блоге: 1
27.10.2013, 22:58 2
Цитата Сообщение от koperfild Посмотреть сообщение
#include "stdio.h"
#include "string.h"
#include "stdlib.h"//dl9 exi
А надо так:
C
1
2
3
#include <stdio.h>
#include <string.h>
#include <stdlib.h>//dl9 exi
0
9 / 9 / 6
Регистрация: 04.12.2011
Сообщений: 137
27.10.2013, 23:01  [ТС] 3
К сожалению не в этом ошибка. #include <stdio.h> и #include "stdio.h" равнозначно
0
349 / 299 / 166
Регистрация: 15.03.2012
Сообщений: 653
Записей в блоге: 1
28.10.2013, 00:19 4
Цитата Сообщение от koperfild Посмотреть сообщение
Не выводится ни 1 printf.
Теперь выводится
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h> //dl9 exit
#define N 50
 
struct Record{
    char str1[N];
    char str2[N];
    char str3[N];
} *p;
 
void input1();
void input2();
 
int main(){
  p = malloc(sizeof(struct Record));
  int c=0;
    while (c!=27){
        printf("This program let you add cards of ports and ships\n");
        printf("To add ship card press 1\nIf you want to add port card press 2\n");
        printf("To close program press escape\n");
        if ((c=getchar())==49){//Kod 1
            input1();
        }
        else if (c==50){//Kod 2
            input2();
        }
    }
    free( p);
    return 0;
 
}
 
void input1(){
    FILE *f=fopen("ships.dat","ab");
    int c;
    int flag=0;
 
    if (f==NULL){
        perror("Error opening file");
        getchar();
        exit (-1);
    }
 
    while(!flag){
        printf("You are filling information about ship\n\n\n");
 
        printf("Fill-in ship name\n");// Vstavit proverki
        scanf("%s",p->str1);
        printf("Fill-in port of departure\n");
        scanf("%s",p->str2);
        printf("Fill-in arrival port\n");
        scanf("%s",p->str3);
        while (strcmp(p->str2,p->str3)==0){
            printf("Inputed ports must be different. Please input 2nd port again.\n");
            scanf("%s",p->str3);
        }
        fwrite (p, sizeof(struct Record), 1, f);
 
        printf("Return to main menu press escape.\nTo input one more ship card press any key\n");
        if ((c=getchar())==27){
            flag=1;
        }
    }
    fclose(f);
}
 
void input2(){
    FILE *f=fopen("ports.dat","ab");
    int c;
    int flag=0;
 
    if (f==NULL){
        perror("Error opening file");
        getchar();
        exit (-1);
    }
 
    while(!flag){
        printf("You are filling information about port\n\n\n");
 
        printf("Fill-in port name\n");// Vstavit proverki
        scanf("%s",p->str1);
        printf("Fill-in its country\n");
        scanf("%s",p->str2);
        printf("Fill-in its sea\n");
        scanf("%s",p->str3);
 
        fwrite (p, sizeof(struct Record), 1, f);
 
        printf("Return to main menu press escape.\nTo input one more port card press any key\n");
        if ((c=getchar())==27){
            flag=1;
        }
    }
    fclose(f);
}
Просто new и delete это уже с++.
0
9 / 9 / 6
Регистрация: 04.12.2011
Сообщений: 137
29.10.2013, 00:35  [ТС] 5
Долблюсь с scanf и getchar в
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
void input1(){
    FILE *f=fopen("ships.dat","ab");
    int c;
    int flag=0;
 
    if (f==NULL){
        perror("Error opening file");
        getchar();
        exit (-1);
    }
 
    while(!flag){
        printf("You are filling information about ship\n\n\n");
 
        printf("Fill-in ship name\n");// Vstavit proverki
        scanf("%s",p->str1);
        printf("Fill-in port of departure\n");
        scanf("%s",p->str2);
        printf("Fill-in arrival port\n\n");
        scanf("%s",p->str3);
        while (strcmp(p->str2,p->str3)==0){
            printf("Inputed ports must be different. Please input 2nd port again.\n\n");
            scanf("%s",p->str3);
        }
        fwrite (p, sizeof(struct Record), 1, f);
 
        printf("Return to main menu press escape.\nTo input one more ship card press any key\n");
        scanf ("%d",&c);
        if (c==27){
            flag=1;
        }
    }
    fclose(f);
}
Если в конце стоит scanf ("%d",&c); то в следующем цикле не читается первый scanf("%s",p->str1); . Если же в конце вместо scanf ("%d",&c); ставлю c=getchar(); то каким-то образом он пропускается (с какого-то фига читает \n из стоящего перед ним printf). Т.к. этот getchar какой-то мутный хочу заюзать scanf , но как написал он тоже чудачит.
И вопрос как сделать выход по нажатию escape. при нажатии escape ничего не считывается.

Добавлено через 21 час 17 минут
Очень надо разобраться с этими scanf и getchar. А также выяснить можно ли сделать ввод escape. Или же делать нажмите 3 для выхода.
0
29.10.2013, 00:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2013, 00:35
Помогаю со студенческими работами здесь

Подключение библиотеки DLL C++: работает на примере консоли и не работает в WinForms App
Здравствуйте! Помогите начинающему бедному студенту!! Осваиваю С++. В книге...

Решил портировать игру на андроид но управление не работает. Прыжок и стрельба работает
Решил портировать игру на андроид но управление не работает. Прыжок и стрельба работает. Очень...

не работает в ворде веб компонент,и скачав обновление ow 11 не работает все равно
проблема с веб элементами и обновлениями на них))

SelText в textBox'e отчёта не работает или работает не так как в форме?
Пробовал всяко-разно выудить выделенный текст - не выходит. Пишет: &quot;Введенное выражение содержит...

При включении компа у меня не работает монитор, но нормально работает ТВ-выход
Уже несколько дней рву волосы на голове.... Такая проблемка: при включении компа у меня не...

Не работает скомпилированный EXE файл хотя в самой среде игра работает
Я почти закончил разработку своей игры на Unity2D но после запуска скомпилированного EXE файла...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru