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

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

Восстановить пароль Регистрация
 
Kashtan$$$
1 / 1 / 0
Регистрация: 26.11.2009
Сообщений: 49
28.06.2010, 23:18     zadanie6 не хотит вводить строку через gets #1
короче суть такова это все курсовая работа задание 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
togramago
9 / 9 / 0
Регистрация: 03.11.2009
Сообщений: 39
29.06.2010, 03:07     zadanie6 не хотит вводить строку через gets #2
вообще-то сканф читает до пробела, табуляции или перевода строки,
а гетс берет просто строку до перевода строки -
то есть сканф читает по словам, а гетс - по строка (гет стринг - взять стрку).
Может быть в этом загвоздка?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.06.2010, 06:59     zadanie6 не хотит вводить строку через gets #3
После или перед gets можно попробовать поставить такую штуку: while(getchar()!='\n')continue;

Обычно помогает. Вставлять после/перед каждой загвоздкой, только поставь сначала 1, проверь, ну а далее разберешься
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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
Ответ Создать тему
Опции темы

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