Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 15.08.2013
Сообщений: 30

Функция cin.get(array, 80) работает в одной программе, но не работает в другой

07.02.2017, 13:36. Показов 2557. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Я что то совсем запутался, одна и та же функция в одной программе работает, а в другой нет.

В этой программе работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
char str[80];
 
cout << "Введите свое имя";
cin.get(str, 80);
cout << str << '\n';
 
return 0;
}
А тут уже не работает:
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
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
int vibor;
char filename[80];
char array[80];
 
cout << "\n\n";
cout << "1. Прочитать из какого-нибуь файла, и вывести на терминал. \n";
cout << "2. Введите какой-нибудь текст, и программа запишет его в файл. \n\n";
 
        do
        {
        cout << "Выберите один из доступных вариантов:";
        cin >> vibor;
        }
        while (vibor<1 || vibor>2);
 
if (vibor==1)
        {
        cout << "Введите имя файла: ";
        cin.get(filename, 80);
        ifstream iz_faila(filename); 
                if(!iz_faila)
                { 
                cout << "\nНе могу получить доступ к файлу. Пожалуйста проверьте: \n";
                cout << "1. Существует ли файл с таким названием.\n";
                cout << "2. Достаточно ли у вас прав на этот файл. \n\n";
                return 1;
                }
        iz_faila >> array;
        cout << array;
        iz_faila.close();
        }
 
return 0;
}
Вот вывод работы программы в терминале Ubuntu:

alexey@notebook:~$ ./sistema_vvoda_vivoda


1. Прочитать из какого-нибуь файла, и вывести на терминал.
2. Введите какой-нибудь текст, и программа запишет его в файл.

Выберите один из доступных вариантов:1
Введите имя файла:
Не могу получить доступ к файлу. Пожалуйста проверьте:
1. Существует ли файл с таким названием.
2. Достаточно ли у вас прав на этот файл.

alexey@notebook:~$


Даже не дает ввести имя файла.
Через cin работает нормально, но мне нужно чтобы можно было работать со строками в которых есть пробелы.
Миниатюры
Функция cin.get(array, 80) работает в одной программе, но не работает в другой  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.02.2017, 13:36
Ответы с готовыми решениями:

Wp_editor не работает на одной странице сайта но работает на другой
Добрый день! поставил на страницу редаткор wp_editor('', 'second', array( 'wpautop' =&gt; 1, 'media_buttons' =&gt; 0, ...

.Copy работает в одной строке кода, но не работает в другой
Добрый вечер Прошу помочь со следующим кодом - строка 7 работает на отлично, но строка 8 выдаёт Application enabled or object-defined...

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые мне не понятны, и прошу объяснить, как...

6
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
07.02.2017, 13:53
Распространенные ошибки
0
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
07.02.2017, 14:20
SNIKERSMRG,
C++
1
2
3
4
5
6
 do
        {
        cout << "Выберите один из доступных вариантов:";
        cin >> vibor;
        }
        while (vibor<1 || vibor>2);
здесь используется cin после него в потоке остается значение до встречи с '\n'. проверить это можно так

if (vibor==1)
C++
1
2
3
4
5
6
       {
        cout << "Введите имя файла: ";
        cout << cin.get();
        cin.get(filename, 80);
        ifstream iz_faila(filename); 
                if(!iz_faila)
Добавлено через 15 минут
SNIKERSMRG,
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
// Эта программа демонстрирует возможности системы ввода-вывода С++
 
#include <iostream>
#include <fstream>
#include <cstring>
#include <limits>
using namespace std;
 
int main()
{
int vibor;
char filename[80];
char array[80];
 
cout << "\n\n";
cout << "1. Прочитать из какого-нибуь файла, и вывести на терминал. \n";
cout << "2. Введите какой-нибудь текст, и программа запишет его в файл. \n\n";
 
    do
    {
    cin >> vibor;
    }
    while (vibor<1|| vibor>2);
if (vibor==1)
    {
    cout << "Введите имя файла: ";
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.clear();
    cout << cin.get();
    
    cin >> filename;
    ifstream iz_faila(filename); 
        if(!iz_faila)
        { 
        cout << "\nНе могу получить доступ к файлу. Пожалуйста проверьте: \n";
        cout << "1. Существует ли файл с таким названием.\n";
        cout << "2. Достаточно ли у вас прав на этот файл. \n\n";
        return 1;
        }
    iz_faila.get (array,80);
    cout << array;
    iz_faila.close();
    }
if (vibor==2)
    {
    cout << "Напишите какой-нибудь текст: ";
    cin >> array;
    cout << "\nВведите имя файла в который нужно записать: ";
    cin >> filename;
    ofstream v_file(filename);
        if(!v_file)
        {
         cout << "\nНе могу записать данные в файл.";
        return 1;
        }
    }
return 0;
}
Добавлено через 5 минут
SNIKERSMRG, Собственно вывод: если в конце программы cin.get() не ждет пользовательского ввода, значит, вы оставили за собой непустой входной поток.
1
3 / 3 / 1
Регистрация: 15.08.2013
Сообщений: 30
07.02.2017, 14:48  [ТС]
MRG_Serejka, вы не правы, прошу заметить, что ввод у вас происходит путем использования CIN в итоге, а не CIN.GET(array, 80)
0
15 / 15 / 8
Регистрация: 15.08.2013
Сообщений: 190
07.02.2017, 15:07
Лучший ответ Сообщение было отмечено SNIKERSMRG как решение

Решение

SNIKERSMRG,Лови
C++
1
2
3
4
5
6
7
if (vibor==1)
        {
        cout << "Введите имя файла: ";
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cin.get (filename,80);
        ifstream iz_faila(filename);
                if(!iz_faila)
В нашем случае мы стремимся отбросить максимальное число символов, которое может содержать поток, до первого перевода строки включительно.

Добавлено через 12 минут
нужно использовать заголовочный файл
C++
1
#include <limits>
1
3 / 3 / 1
Регистрация: 15.08.2013
Сообщений: 30
07.02.2017, 15:09  [ТС]
MRG_Serejka,

В итоге получилось так:
Кликните здесь для просмотра всего текста

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
// Эта программа демонстрирует возможности системы ввода-вывода С++
 
#include <iostream>
#include <fstream>
#include <cstring>
#include <limits>
 
using namespace std;
 
int main()
{
int vibor;
char filename[80];
char array[80];
 
cout << "\n\n";
cout << "1. Прочитать из какого-нибуь файла, и вывести на терминал. \n";
cout << "2. Введите какой-нибудь текст, и программа запишет его в файл. \n\n";
 
    do
    {
    cout << "Выберите один из доступных вариантов:";
    cin >> vibor;
    }
    while (vibor<1 || vibor>2);
 
if (vibor==1)
    {
    cout << "Введите имя файла: ";
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.get(filename, 80);
        ifstream iz_faila(filename); 
        if(!iz_faila)
        { 
        cout << "\nНе могу получить доступ к файлу. Пожалуйста проверьте: \n";
        cout << "1. Существует ли файл с таким названием.\n";
        cout << "2. Достаточно ли у вас прав на этот файл. \n\n";
        return 1;
        }
    iz_faila.get(array, 80);
    cout << array;
    iz_faila.close();
    }
 
if (vibor==2)
    {
    cout << "Напишите какой-нибудь текст: ";
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.get(array,80);
    cout << "\nВведите имя файла в который нужно записать: ";
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.get(filename, 80);
    ofstream v_file(filename);
        if(!v_file)
        {
        cout << "\nНе могу записать данные в файл.";
        return 1;
        }
    v_file << array;
    v_file.close();
    }
return 0;
}


Да оно теперь работает, но нельзя ли как то по легче способ найти ?
Ведь вы предложили для решения проблемы включить дополнительно библиотеки
#include <cstring>
#include <limits>

и перед каждым использованием функции CIN.GET(array, 80) нужно использовать функцию
cin.ignore(numeric_limits<streamsize>::m ax(), '\n');
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
07.02.2017, 16:41
Цитата Сообщение от SNIKERSMRG Посмотреть сообщение
но нельзя ли как то по легче способ найти ?
Можно:
C++
1
(cin >> vibor).get();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2017, 16:41
Помогаю со студенческими работами здесь

Не работает видеокарта на одной материнке, но работает на другой!
Всем доброго! Нашёл свой старый комп. Полностью обслужил, но вот сложилась такая ситуация: Palit GT 240 (1GB GDDR3) наотрез не хочет...

Видеокарта работает на одной материнке, но не работает на другой
Видеокарта не работает на одной материнки хотя на другом компе на другой материнке работает, материнская плата новая купил заменил,в...

Функция работает, но выдает Notice: Array to string conversion
Помогите исправить ошибку есть метод public function insertMany($table, $object,$last = null,$count=null) { $columns =...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru