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

Посоветуйте альтернативу scanf() в этом коде - C++

Восстановить пароль Регистрация
 
noobolamer
0 / 0 / 0
Регистрация: 03.07.2014
Сообщений: 2
03.07.2014, 04:07     Посоветуйте альтернативу scanf() в этом коде #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
46
47
48
49
// не работает scanf() в цыкле if, если же перед %c поставить пробел почему то, если ввести  Y  то происходит
// замещение строк, выглядит как будто z[2].a, 99 уже введено
#include <cstdio>
#include <iostream>
using namespace std;
 
struct x
{
char a[100], b[100], c[500];
int y;
float v;
} z[3];
 
int main(void)
{
int t = 0;
int r = 0;
char f;
do
        {
        cout << "Put the name of the track:" << endl;
        printf("%d)", t+1);
        cin.getline(z[t].a, 99);
        cout << "Put the author of the composition:" << endl;
        printf("%d)", t+1);
        cin.getline(z[t].b, 99);
        cout << "Put the description of the track:" << endl;
        printf("%d)", t+1);
        cin.getline(z[t].c, 499);
        cout << "Put the number of the track:" << endl;
        printf("%d)", t+1);
        scanf("%d", &z[t].y);
        cout << "Put the rate of the track:" << endl;
        printf("%d)", t+1);
        scanf("%f", &z[t].v);
        t++;
        if(t < 3)
                {
                cout << "Do you want to put information about next track ? Y/n ?" << endl;
                scanf("%c", &f);
                }
        }
while(t < 3 && (f == 'Y' || f == 'y'));
puts("Name      Author          Description             Number  Rate\n");
for(r = 0;r < t; r++)
printf("%s      %s              %s              %d      %.2f", z[r].a, z[r].b, z[r].c, z[r].y, z[r].v);
putchar('\n');
return(0);
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2014, 04:07     Посоветуйте альтернативу scanf() в этом коде
Посмотрите здесь:

C++ Как считать строку scanf'ом при этом не переходя на новую строку, т.е. без использования Enter'а
Что не правильно в этом коде? C++
C++ Нужно найти ошибки в этом коде.
C++ помогите в этом коде записать в файл
Составить программу, которая по введенному номеру месяца и номеру года выводит количество дней в этом месяце(использовать операторы printf и scanf) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2136 / 969 / 223
Регистрация: 30.11.2013
Сообщений: 3,240
03.07.2014, 04:34     Посоветуйте альтернативу scanf() в этом коде #2
Цитата Сообщение от noobolamer Посмотреть сообщение
Посоветуйте альтернативу scanf() в этом коде
C++
1
 gets(&f);
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2014, 08:23     Посоветуйте альтернативу scanf() в этом коде #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
(cin >> z[t].y).get(); // вместо scanf("%d", &z[t].y);
и т.д.
zss
Модератор
Эксперт С++
 Аватар для zss
5947 / 5552 / 1784
Регистрация: 18.12.2011
Сообщений: 14,184
Завершенные тесты: 1
03.07.2014, 08:47     Посоветуйте альтернативу scanf() в этом коде #4
rikimaru2013, gets читает строку, т.е. массив символов (с завершающим нулем), а f у ТС - один символ.
для чтения символов есть функция f=getchar();
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
03.07.2014, 09:05     Посоветуйте альтернативу scanf() в этом коде #5
Цитата Сообщение от noobolamer Посмотреть сообщение
(f == 'Y' || f == 'y'))
раскладку клавы посмотри, по умолчанию вполне может прыгнуть в русский
а лучше так
(f == 'Y' || f == 'y' || f == 'н' || f == 'Н'))
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2014, 11:06     Посоветуйте альтернативу scanf() в этом коде #6
Цитата Сообщение от noobolamer Посмотреть сообщение
// не работает scanf() в цыкле if, если же перед %c поставить пробел почему то, если ввести *Y *то происходит
// замещение строк, выглядит как будто z[2].a, 99 уже введено
Если правильно понял проблему:
C++
1
2
scanf("%c", &f);
getchar(); // убрать из потока '\n' перед getline()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 20:03     Посоветуйте альтернативу scanf() в этом коде
Еще ссылки по теме:

Структура (найти ошибку в этом коде) C++
C++ Что в этом коде не правильно?
Сколько методов реализовано в этом коде? C++

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

Или воспользуйтесь поиском по форуму:
noobolamer
0 / 0 / 0
Регистрация: 03.07.2014
Сообщений: 2
03.07.2014, 20:03  [ТС]     Посоветуйте альтернативу scanf() в этом коде #7
Всем спасибо ответ alsav22 решил проблему.
Yandex
Объявления
03.07.2014, 20:03     Посоветуйте альтернативу scanf() в этом коде
Ответ Создать тему
Опции темы

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