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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
#1

zadanie6 не хотит вводить строку через gets - C++

28.06.2010, 23:18. Просмотров 515. Ответов 4
Метки нет (Все метки)

короче суть такова это все курсовая работа задание 6 выглядит следующим образом:
дано предложение и число к зашифровать предложение выполнив циклическую замену
каждой буквы на букву находящуюся в алфавите на к_той позиции после шифруемой буквы.знаки препинания и пробелы оставить без изменений.вот лично сам код
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
 
// Zadanie 1
int chislo(int d)
 
{ int f;
f=fmod(d,10)*100+floor(d/10);getch();
return f;
}
//Zadanie 2
void nadbavka()
{float nad,sr_zar;int stazh;
puts("Vvedite srednii zarabotok");scanf("%f",&sr_zar);
puts("Vvedite stazh raboti");scanf("%d",&stazh);
if(stazh<=15)nad=sr_zar*0.1;
if(stazh>15&& stazh<=25)nad=sr_zar*0.2;
if(stazh>25)nad=sr_zar*0.02*stazh;
printf("\n Vasha nadbavka k pensii ravna %7.2f",nad);
}
//zadanie 3
void znachenie()
{int i,N;float x,y;
m2:;printf("\n Vvedite N>0");scanf("%d",&N);
if(N<=0){printf("\n oshibka vvoda");goto m2;}
m3:;printf("\n vvedite x");scanf("%f",&x);
if(fabs(x)>=1){printf("\n oshibka vvoda");goto m3;}
for(i=1;i<=N;i+=2)
y+=pow((-1),i)*pow(x,i)/i;
printf("\n znachenie ravno %5.3f",y);
}
//zadanie 4
void maximum()
{int i,N[50],max=-1000,m,k=0;
printf("\n VVedite razmernost massiva");scanf("%d",&m);
for(i=0;i<m;i++)
{N[i]=random(7)-1;
 printf("%4d",N[i]);}getch();
for(i=0;i<m;i++)
if(!(N[i]<N[i+1]) && !(N[i]<N[i-1])&& !(N[i]>N[i+1]) && !(N[i]>N[i-1]))
if(N[i]>max){max=N[i];k++;}
 
if(k==0)printf(" Takih elementov ne naideno");else printf("\n Maximalnii %d",max);
 
}
//Zadanie 5
void matrix()
{int i,j,nommaxi,nommini,nommaxj,nomminj,k,TT[8][9],max,min;
printf("Matrica TT\n");
for(i=0;i<8;i++){
for(j=0;j<8;j++){
TT[i][j]=random(50)-18;
printf("%5d",TT[i][j]);}
printf("\n");}
getch();
min=1000;max=-1000;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
if(i<j)
{if(TT[i][j]>max){
max=TT[i][j];nommaxi=i;nommaxj=j;}
if(TT[i][j]<min){min=TT[i][j];
nommini=i;nomminj=j;}
}
printf("max %d\t min %d ",max,min);
printf("nommin %d%d\t nommax %d%d",nommini,nomminj,nommaxi,nommaxj);
printf("\nMax i Min pomenyali mestami\n");
for(i=0;i<8;i++){
k=0;
for(j=0;j<8;j++){
TT[nommini][nomminj]=max;
TT[nommaxi][nommaxj]=min;
printf("%5d",TT[i][j]);if(TT[i][j]<0)k++;}
TT[i][8]=k;
printf("\n");
}
printf("\n S dopolnitelnim stolbcom\n");
for(i=0;i<8;i++){
for(j=0;j<9;j++)
printf("%5d",TT[i][j]);
printf("\n");}getch();
}
//zadanie 6
void stroka()
{
char c,s[70];
int i,j,k,dl1,dl2,t,k0,f;
 
 
puts("vvedite stroku\n");
gets(s);
puts("\n vvedite chislo ");scanf("%d",&k);
dl1=strlen(s);
char alf[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
dl2=strlen(alf);
for(i=0;i<dl1;i++){
k0=0;
for(j=0;j<dl2;j++)
if(s[i]==alf[j]){k0++;t=j+k;
              if(t>=52){f=t-52;s[i]=alf[f];}else s[i]=alf[j+k];
printf("%c",s[i]);break;}else
if(j==(dl2-1)&&k0==0)printf("%c",s[i]);
}getch();
}
 
 
 
 
 
main()
{int x;
char q[1];
clrscr();textbackground(10);textcolor(0);
 
while(atoi(q)!=8)
{
clrscr();
puts("\n\n\t\t\t\tMENU\n\n\n\t\t\t1.Zadanie 1");
puts("\n\t\t\t2.Zadanie 2\n\n\t\t\t3.Zadanie 3\n\n\t\t\t4.Zadanie 4");
puts("\n\t\t\t5.Zadanie 5\n\n\t\t\t6.Zadanie 6\n\n\t\t\t7.Zadanie 7\n\n\t\t\t8.VIHOD");
printf("Vvedite punkt menu i nagmite enter:");
scanf("%s",&q);
 
switch(atoi(q))
{
case 1:clrscr();m1:;printf("\n VVedite trehznachnoe chislo ");scanf("%d",&x);
if(x<100 || x>999){printf("\n Nepravilnii vvod");getch();goto m1;}
printf("\n Izmenennoe chislo  %d ",chislo(x));
 
 
getch();break;
case 2:clrscr();
nadbavka();
getch();break;
case 3:clrscr();
 znachenie();
getch();break;
case 4:clrscr();
maximum();
getch();break;
case 5:clrscr();
matrix();
getch();break;
case 6:clrscr();
stroka();
getch();break;
case 7:clrscr();
getch();break;
case 8:printf("\t\t DO SVIDANIYA !!! nagmite ENTER ");getch();
break;
default:clrscr();printf("\t\t\t OSHIBKA Nagmite enter\n");getch();
}
}}
так вот он не хочет вводить строку....пробовал через форматный ввод scanf() все прекрасно но есть одно но как только ставлю пробел все сбой....пробовал код испытывать отдельно от основной программы так тут тож беда если через форматный вввод а вот через gets все работает отлично
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
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
#include<string.h>
#include<ctype.h>
//zadanie 6
void stroka()
{
char s[70],c;
int i,j,k,dl1,dl2,t,k0,f;
 
 
puts("vvedite stroku\n");
gets(s);
printf("\n vvedite chislo ");scanf("%d",&k);
dl1=strlen(s);
char alf[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
dl2=strlen(alf);
for(i=0;i<dl1;i++){
k0=0;
for(j=0;j<dl2;j++)
if(s[i]==alf[j]){k0++;t=j+k;
              if(t>=52){f=t-52;s[i]=alf[f];}else s[i]=alf[j+k];
printf("%c",s[i]);break;}else
if(j==(dl2-1)&&k0==0)printf("%c",s[i]);
}
}
main()
{
 
textbackground(10);textcolor(0);
 
stroka();
и цвет не меняет в отдельной программе парюсь вторые сутки может быть знающие люди подскажут
программная среда Borland C++ компилятор V 3.11
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2010, 23:18     zadanie6 не хотит вводить строку через gets
Посмотрите здесь:

Почему не работает цикл [B]do{}while(.)[/B], если вводить строку с пробелом? - C++
Доброго времени суток! Рассматриваю пример из книги Лафоре (ниже). Программа как бы работает, но если вводить имя из двух слов(Имя...

Не получается вводить слово и использовать его через for - C++
Делаю корявый код базы данных студентов через структуру. Хочу чтобы пользователь мог ввести фамилию студента и получить его данные. Пока...

Почему если во вторую и третью строку, вводить сперва символы а потом числа. То atoi, atof выводят "0" - C++
#pragma hdstop #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define eof 26 #define max 1000 #include &lt;stdlib.h&gt; getline(char s, int...

Вывод через строку - C++
Сейчас программа выдает через cout результат, а нужно сделать через строку Помогите пожалуйста как это реализовать) #include &lt;string&gt; ...

Передать строку через функцию. - C++
#pragma once class User { private: char *Surname; public: User(void); char SurnameReturn(); }

Запуск через командную строку с параметрами - C++
Помогите плиз!!! void main(int argc, char *argv) { int k,N; clrscr(); LIST *lst; FILE *fi,*fo; if (( fi = fopen(argv,&quot;r&quot;)) ==...

Передача символов через командную строку - C++
Доброго времени суток! Прошу помочь мне с решением данной задачи: Через командную строку передать два символа. Распечатать символ с...

Разбить строку в массив через разделитель - C++
Здравствуйте уважаемые форумчане. Мне как новичку интересно как выполнить следующее. Необходимо разбить содержимое строки через...

Запуск Gnu через командную строку - C++
Здравствуйте, у меня возникла проблема такая интересная (лично для меня :D), вобщем до недавнего времени я занимался паскалем и решил...

Как строку записать через printf - C++
Здравствуйте! Как строку in &gt;&gt; i &gt;&gt; j; Записать на си через printf ?


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
togramago
9 / 9 / 0
Регистрация: 03.11.2009
Сообщений: 39
29.06.2010, 03:07     zadanie6 не хотит вводить строку через gets #2
вообще-то сканф читает до пробела, табуляции или перевода строки,
а гетс берет просто строку до перевода строки -
то есть сканф читает по словам, а гетс - по строка (гет стринг - взять стрку).
Может быть в этом загвоздка?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
29.06.2010, 06:59     zadanie6 не хотит вводить строку через gets #3
После или перед gets можно попробовать поставить такую штуку: while(getchar()!='\n')continue;

Обычно помогает. Вставлять после/перед каждой загвоздкой, только поставь сначала 1, проверь, ну а далее разберешься
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
29.06.2010, 12:58     zadanie6 не хотит вводить строку через gets #4
Не читал весь пост ТС, но судя по назавнию темы и по данным советам, могу предположить, что gets() не читате строку потому, что в потоке '\0' остается, например после cin'а, и gets() его считывает. Если дело в этом, попоробуйте перед gets() написать cin.ignore(), это удалит нуль из потока.
...могу ошибаться с сутью проблемы...
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
30.06.2010, 12:23  [ТС]     zadanie6 не хотит вводить строку через gets #5
Цитата Сообщение от Lavroff Посмотреть сообщение
После или перед gets можно попробовать поставить такую штуку: while(getchar()!='\n')continue;

Обычно помогает. Вставлять после/перед каждой загвоздкой, только поставь сначала 1, проверь, ну а далее разберешься
спасибо помогло

Добавлено через 1 минуту
Цитата Сообщение от Kastaneda Посмотреть сообщение
Не читал весь пост ТС, но судя по назавнию темы и по данным советам, могу предположить, что gets() не читате строку потому, что в потоке '\0' остается, например после cin'а, и gets() его считывает. Если дело в этом, попоробуйте перед gets() написать cin.ignore(), это удалит нуль из потока.
...могу ошибаться с сутью проблемы...
помогает только для первого запуска программы вторичный запуск выдает ту же проблему...а так тоже можно разобраться посмотреть....

Добавлено через 1 минуту
togramago теорию и я прекрасно знаю...практика...)))всем спасибо...а тоя уже места себе не находил волосы на попе начал рвать...))))

Добавлено через 22 часа 58 минут
Все было бы прекрасно но не догнал одного ведь отдельно аналогичный код так же через функцию....почему работают по разному....? кто сможет объяснить.
Yandex
Объявления
30.06.2010, 12:23     zadanie6 не хотит вводить строку через gets
Ответ Создать тему
Опции темы

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