Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 16
1

Съедается первый символ

05.10.2017, 12:17. Показов 2137. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При вводе символов и подсчёте первый символ съедается, как это исправить?
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
 #include "iostream" 
#include "stdio.h" 
#include "clocale" 
using namespace std;
int main() 
{ 
 setlocale (LC_ALL, "Russian"); 
 int ka = 0, kpr = 0, kost = 0; 
 char c; 
 cout << "Vvedite posledovatelnost simvolov, zakanchivaushuusya EOF \n"; 
 cin >> c; 
 while ((c = getchar()) != EOF) 
  if (c == 'A' || c == 'a') 
   ka++; 
  else 
   if (c == ' ' || c == '\t' || c == '\n') 
    kpr++; 
   else 
    kost++; 
 cout << "\n Bilo vvedeno\n Bykv A:" << ka << "\n"; 
 cout << " Probelov:" << kpr << "\n"; 
 cout << " Ostalnih:" << kost << "\n"; 
 return 0; 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2017, 12:17
Ответы с готовыми решениями:

Заменить первый и полследний символ на *
Написать программу которая выполняет следующие действия над введёным с клавиатуры словом: 1)...

Первый символ каждой строки
Дан текстовый файл «in.txt». Требуется из каждой его строки удалить первый символ, и вывести...

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

Заменить первый и последний символ на звездочку
Слово вводится с клавиатуры. написать программу для заменыпервого и последнего символа на *

11
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.10.2017, 12:32 2
Уберите строку 11
1
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 16
05.10.2017, 12:38  [ТС] 3
Но если я её уберу то как я введу символы то?
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
05.10.2017, 12:41 4
Цитата Сообщение от Yuniiko Посмотреть сообщение
как я введу символы то?
А что по-вашему getchar делает?
0
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 16
05.10.2017, 13:56  [ТС] 5
Ну если я убираю 11 строку то программа не просит ввести ничего и просто выводит на экран что все по 0

Добавлено через 3 минуты
А все, я просто кое где ошибся, спасибо большое, заработало!

Добавлено через 1 час 9 минут
Возникла другая проблема, !=EOF должен вроде как реагировать на enter после ввода символов, и начинать считать символы и вывести на экран, но после enterон переходит на другую строку, и что бы программа продолжила работать нужно нажать ctrlz(^Z) и ещё раз enter
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,877
05.10.2017, 15:10 6
Цитата Сообщение от Yuniiko Посмотреть сообщение
!=EOF должен вроде как реагировать на enter
enter это '\n' а не EOF
EOF в консоли это ^D
Цитата Сообщение от Yuniiko Посмотреть сообщение
что бы программа продолжила работать нужно нажать ctrlz(^Z) и ещё раз enter
^Z должен отправить программу в паузу, это сигнал SIG_SUSPEND вроде, его даже перехватить нельзя. Как у вас это работает?!
Ну и ловить равенство char с EOF (который обычно равен -1) не лучшая идея.
Для ловли пробелов лучше воспользоваться isspace()
0
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 16
07.10.2017, 16:40  [ТС] 7
Я имею в виду как мне сделать так, что бы сразу после введения символов "aaa bbb" я просто нажал enter и программа начала работать. Потому что сейчас когда я нажимаю enter она переходит на другую строку и дальше что бы программа начала работать нужно нажать ctrl Z и только тогда enter
Миниатюры
Съедается первый символ  
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
07.10.2017, 17:35 8
Лучший ответ Сообщение было отмечено Yuniiko как решение

Решение

Yuniiko,
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
#include "iostream" 
#include "stdio.h" 
#include "clocale" 
using namespace std;
int main()
{
    setlocale(LC_ALL, "Russian");
    int ka = 0, kpr = 0, kost = 0;
    char c[100];
    cout << "Vvedite posledovatelnost simvolov, zakanchivaushuusya EOF \n";
    gets(c);
    for (int i = 0; i < strlen(c); i++)
    {
        if (c[i] == 'A' || c[i] == 'a')
            ka++;
        else
        if (c[i] == ' ' || c[i] == '\t' || c[i] == '\n')
            kpr++;
        else
            kost++;
    }
    cout << "\n Bilo vvedeno\n Bykv A:" << ka << "\n";
    cout << " Probelov:" << kpr << "\n";
    cout << " Ostalnih:" << kost << "\n";
    return 0;
}
1
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 16
07.10.2017, 17:44  [ТС] 9
В Visual Studio не опознаёт gets

Добавлено через 2 минуты
Всё, использовал gets_s и всё заработало, спасибо огромное)
0
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,877
07.10.2017, 17:54 10
В документации на gets написано Never use this function. Попробуйте fgets(str, size, stdin); (он входит в stdio.h) - это точно лучше чем использовать непереносимые костыли вроде printf_s, gets_s и т.п.
0
0 / 0 / 0
Регистрация: 05.10.2017
Сообщений: 16
07.10.2017, 18:08  [ТС] 11
Тогда вот это пишет: "fgets: функция не принимает 1 аргументов"
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
07.10.2017, 18:24 12
Ну, если
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Never use this function
Исправимся.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <cstdlib>
int main()
{
    std::string s;
    int countA = 0, countSp = 0, countOth = 0;
    std::cout << "Enter string:" <<std::endl;
    std::getline(std::cin, s);
    for (auto &ch : s)
    {
        if (toupper(ch) == 'A') countA++;
        else if (isspace(ch)) countSp++;
        else countOth++;
    }
    std::cout << "Count of A letters:" << countA << std::endl;
    std::cout << "Count of spaces:" << countSp << std::endl;
    std::cout << "Other chars:" << countOth << std::endl;
    return 0;
}
0
07.10.2017, 18:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2017, 18:24
Помогаю со студенческими работами здесь

Заменить первый и последний символ слова на *
Слово вводится с клавиатуры: 1)Заменить первый и последний символ на * 2)Произвести обмен...

Считывается только первый символ char
Всем привет! При введении данных с клавиатуры записывается только первый символ, а дальше программа...

Выводится только первый символ строки
Имеется код: #include &lt;iostream&gt; using namespace std; int main() { string k, s =...

Поменять местами первый и последний символ в строке
Дана строка S. Поменять местами первый и последний символ в строке


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru