Форум программистов, компьютерный форум CyberForum.ru

Добавить цикл с постусловием - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
masha1207
0 / 0 / 0
Регистрация: 20.10.2009
Сообщений: 108
15.10.2010, 20:36     Добавить цикл с постусловием #1
Задача:

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
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>
 
void main()
 {clrscr();
struct Abiturient
 {
  char code[30];
  char fam[15];
  char name[15];
  char group[5];
  char sex;}
  dannie;
 
  FILE *in; //tekstovii fail
 
  //poluchim dannie ot polzovatela
 printf("kod ");
 scanf("%s",dannie.code); //stroka simvolov
 printf("familia ");
 scanf("%s",dannie.fam);
 printf("imea ");
 scanf("%s",dannie.name);
 printf("gruppa ");
 scanf("%s",dannie.group);
 printf("pol ");
 scanf("%s",dannie.sex);
 in=fopen ("T:\\kroha\\dannie.txt","ab");//sozdaem fail v dvoic structure
 fwrite(&dannie,sizeof(dannie),1,in);
 fclose(in);
 
 
 
 //i zapisem ih v fail
 in=fopen ("T:\\kroha\\dannie.txt","rb");//otkr dlia ctenia v dv struc
 fprintf(in,"%s %s %s %s %s",dannie.code,dannie.fam,dannie.name,dannie.group,
 dannie.sex);
 puts("informacia dobavlena");
 fclose(in); //zakrit fail
 
 printf("\n\ndlia zaversenia raboti nazmite <Enter>\n");
 getch();
 }
дописать в задачу цикл с постусловием(while). каждый раз после ввода данных предлогать "продолжить да/нет".
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.10.2010, 20:38     Добавить цикл с постусловием #2
masha1207, while - цикл с предусловием. С постусловием - do while
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
15.10.2010, 21:44     Добавить цикл с постусловием #3
Цитата Сообщение от masha1207 Посмотреть сообщение
FILE *in; //tekstovii fail
Даа, действительно фейл )
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
15.10.2010, 22:15     Добавить цикл с постусловием #4
Вот тебе постусловие..... continue? нажимаешь 'y'(yes) цикл повторяется
Вместо clrscr у меня system("cls")
Я заменил char sex; на char sex[1]; а то ошибка вылетала

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
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
struct Abiturient
{
char code[30];
char fam[15];
char name[15];
char group[5];
char sex[1];}
dannie;
 
void main()
{
    char ch;
do
{
    system("cls");
    printf("code "); scanf("%s",dannie.code);
        printf("familia "); scanf("%s",dannie.fam);
printf("name ");  scanf("%s",dannie.name);
printf("group ");  scanf("%s", dannie.group);
printf("pol ");  scanf("%s",dannie.sex);
printf("continue? (y/n)");
 ch = _getch();
} while( ch == 'y');
 
_getch();
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.10.2010, 22:21     Добавить цикл с постусловием #5
NikolaWhite,
C++
1
 char sex[1]
Лично у меня вызывает подозрение... Значит всего у нас можно записать туда 1 символ. При этом 1 символ должен быть код конец строки. Здравствуй переполнение буфера?
По-моему проще ее оставить char и в вводе поставить %c. Но насчет переполнения могу быть не прав. Сейчас протестирую.

Добавлено через 2 минуты
C++
1
char str[1]="M";
Опа. Компилятор сам аж написал.
Error 1 error C2117: 'str' : array bounds overflow
Да. Это ошибка. Либо char, либо char sex[2] надо
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
15.10.2010, 22:48     Добавить цикл с постусловием #6
Цитата Сообщение от Lavroff Посмотреть сообщение
Опа. Компилятор сам аж написал.
Error 1 error C2117: 'str' : array bounds overflow
Написал он это из-за того, что длина строки "M" равна двум.

Что бы нормально считывать, нужно писать
scanf("%с",&dannie.sex);
где
sex - переменная типа char, т.е.
char sex; // без каких-либо массивов.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.10.2010, 22:51     Добавить цикл с постусловием #7
Andrew_Lvov, Ну это я понял. Я проверял просто реально ли переполнение буфера. Оказалось не просто реально а 100%, если хоть что-то ввести в sex
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
16.10.2010, 04:08     Добавить цикл с постусловием #8
C
1
    char str[0]='M';
?
Это работает?
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
16.10.2010, 13:28     Добавить цикл с постусловием #9
#pragma, смотря как оглашён str.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2010, 21:09     Добавить цикл с постусловием
Еще ссылки по теме:

Цикл с постусловием: Вычислить сумму ряда с точностью Е, член которого Аn= 2(n!)/3(n!)^2 C++
C++ Цикл с предусловием и постусловием
C++ Используя цикл с постусловием, составить программу табулирования функции F(x)=sin(x)-cos(x) на отрезке [a, b] с шагом h

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

Или воспользуйтесь поиском по форуму:
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
16.10.2010, 21:09     Добавить цикл с постусловием #10
То есть
C
1
char str[1]={'M'};
я к тому что это вроде неправильно:
C
1
char str[1]="M";
тут же str это массив символов,а "M" это const char* (если не ошибаюсь)
Yandex
Объявления
16.10.2010, 21:09     Добавить цикл с постусловием
Ответ Создать тему
Опции темы

Текущее время: 09:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru