Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Frankie
0 / 0 / 0
Регистрация: 30.05.2013
Сообщений: 6
#1

Найти ошибку - C++

25.06.2013, 14:03. Просмотров 393. Ответов 10
Метки нет (Все метки)

Не могу найти ошибку в программе, не ищет букву "а", в некоторых случаях подсчет не правильный. Программа должна найти и подсчитать в строке кол-во букв "а" в первом слове.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip.h>
 
void main()
{
    int a = 0;
    char q;
    cout << "vvedite predlojenie ";
    cin >> q;
    for(int i = 0; i < q; i++)
        {
         if(q == 'a') a++;
         if(q == ' ') ;
        }
    if(a == 0) cout << "Net bukvi 'a' v 1 slove: " <<  endl;
    else cout << "kolichestvo bukv  'a' v 1 slove: " << a << endl   ;
    getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 14:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти ошибку (C++):

Найти ошибку в программе: в visual studio выдает ошибку - C++
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { double x, E, ypred, y, S; ...

Помогите найти ошибку: По двум сторонам и углу найти все остальное - C++
Доброго времени суток. В универе дали задание написать программу &quot;По двум сторонам и углу между ними в треугольнике АВС найти два остальных...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Найти сумму первых n-четных натуральных чисел (найти ошибку) - C++
Нужно найти сумму первых n-четных натуральных чисел. Ошибка вылетает на 13 строке, должно быть я не правильно код составил, алгоритм не тот...

Найти сумму целых отрицательных чисел удовлетворяющих условию (найти и исправить ошибку в коде) - C++
#include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() { int y = 0; for(int i = -21; i &lt; -99; i+=3) ...

Массивы. Найти среднее арифметическое элементов массива, расположенных до максимального элемента (найти ошибку в задании) - C++
Препод говорит что тут есть ошибка, но где не говорит, прошу если кото-нибуть заметит сообщите. Ввести одномерный статический массив...

10
iv-a
15 / 15 / 0
Регистрация: 25.06.2013
Сообщений: 63
25.06.2013, 14:12 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<conio.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<iomanip.h>
 
void main()
{
    int a = 0;
    char q[100];
    cout << "vvedite predlojenie ";
    cin >> q;
    for(int i = 0; i < strlen(q); i++)
        {
         if(q[i] == 'a') a++;
         if(q[i] == ' ') ;
        }
    if(a == 0) cout << "Net bukvi 'a' v 1 slove: " <<  endl;
    else cout << "kolichestvo bukv  'a' v 1 slove: " << a << endl   ;
    getch();
}
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 14:15 #3
C++
1
2
3
4
5
6
7
8
9
10
11
    int a = 0;
    char q[100];
    cout << "vvedite predlojenie ";
    cin >> q;
    for(int i = 0; i < strlen(q); i++)
    {
         if(q[i] == 'a') a++;
    }
    if(a == 0) cout << "Net bukvi 'a' v 1 slove: " <<  endl;
    else cout << "kolichestvo bukv  'a' v 1 slove: " << a << endl;
    getch();
0
AndLap
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 9
25.06.2013, 14:34 #4
@Frankie, Вот работающий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
int main()
{
    int counter = 0;
    char q[100];
    cout << "vvedite predlojenie ";
    cin >> q;
    for(int i = 0; q[i] != ' '; i++)
        {
         if(q[i] == 'a')
         counter++;
        }
    if(counter == 0) cout << "Net bukvi 'a' v 1 slove" <<  endl;
    else cout << "kolichestvo bukv  'a' v 1 slove: " << counter << endl   ;
 
    return 0;
}
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.06.2013, 15:55 #5
Добавлено через 1 минуту
Цитата Сообщение от AndLap Посмотреть сообщение
Вот работающий код
А проверяли? Код как раз неработающий. cin >> читает одно слово (до пробела) из введённого предложения. Поэтому пробела не будет, а значит и выхода из цикла.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7773 / 4809 / 747
Регистрация: 29.11.2010
Сообщений: 13,130
25.06.2013, 19:02 #6
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
    std::string str;
    std::getline(std::cin, str, ' ');
    std::cout << "Counter: " << std::count(str.begin(), str.end(), 'a') << std::endl;
}
0
AndLap
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 9
28.06.2013, 12:50 #7
@alsav22, Программа рабочая, да операция ">>" считает, что пробел это нулевой символ, но ведь нам и нужно первое слово
Программа должна найти и подсчитать в строке кол-во букв "а" в первом слове.
Чтобы читалось все предложение, можно сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
using namespace std;
int main()
{
    int counter = 0;
    const int max = 100;
    char q[max];
    cout << "vvedite predlojenie ";
    cin.get(q, max);
    for(int i = 0; q[i] != ' '; i++)
        {
         if(q[i] == 'a')
         counter++;
        }
    if(counter == 0) cout << "Net bukvi 'a' v 1 slove" <<  endl;
    else cout << "kolichestvo bukv  'a' v 1 slove: " << counter << endl   ;
 
    return 0;
}
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.06.2013, 14:09 #8
Цитата Сообщение от AndLap Посмотреть сообщение
да операция ">>" считает, что пробел это нулевой символ,
Ничего она не считает, просто читает до первого пробельного символа (который в слово не попадает).
Цитата Сообщение от AndLap Посмотреть сообщение
Программа рабочая
На скрине результат работы вашей программы (якобы рабочей).
0
Миниатюры
Найти ошибку  
AndLap
0 / 0 / 0
Регистрация: 29.04.2013
Сообщений: 9
28.06.2013, 14:28 #9
@alsav22, у меня она работает Найти ошибку, вы конечно правы, я с вами не спорю, что по хорошему так писать нельзя, просто некоторые компиляторы пропускают эту ошибку и я решил особо не морочиться , но всё равно выше я уже показал код который должен работать везде.
0
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.06.2013, 14:30 #10
Код из 7 поста уже лучше, будет правильно работать, если в предложении не одно слово. Если одно, то та же история: пробела в считаном слове не будет и цикл будет продолжаться до тех пор (будет выход за пределы массива), пока в памяти не попадётся код пробела, или пока не призойдёт исключение. Чтобы это было видно, сделайте вывод i после завершения цикла (если не будет исключения) и посмотрите:
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>
using namespace std;
 
int main()
{
    int counter = 0;
    const int max = 100;
    char q[max];
    cout << "vvedite predlojenie ";
    cin.get(q, max);
    int i;
    for(i = 0; q[i] != ' '; i++)
        {
         if(q[i] == 'a')
         counter++;
        }
    if(counter == 0) cout << "Net bukvi 'a' v 1 slove" <<  endl;
    else cout << "kolichestvo bukv  'a' v 1 slove: " << counter << endl;
    
    cout << i << endl;
    
    system("pause");
    return 0;
}
0
Миниатюры
Найти ошибку  
alsav22
5435 / 4830 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.06.2013, 14:39 #11
Цитата Сообщение от AndLap Посмотреть сообщение
просто некоторые компиляторы пропускают эту ошибку
Для компилятора это (выход за границу массива) не ошибка. Компиляторы это не отслеживают. Это ошибка времени выполнения. Тот, кто делает код, должен за этим следить.

Добавлено через 5 минут
Решение очень простое: не нужно к пробелу привязывать выход из цикла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    int counter = 0;
    char q[100];
    cout << "vvedite predlojenie ";
    cin >> q;
    
    for(int i = 0; i < strlen(q); i++)
        {
         if(q[i] == 'a')
         counter++;
        }
    if(counter == 0) cout << "Net bukvi 'a' v 1 slove" <<  endl;
    else cout << "kolichestvo bukv  'a' v 1 slove: " << counter << endl   ;
    
    system("pause");
    return 0;
}
0
28.06.2013, 14:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.06.2013, 14:39
Привет! Вот еще темы с ответами:

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой находится наименьшее // количество...

В строках матрицы с отрицательным элементом на главной диагонали найти наибольший из всех элементов (найти ошибку в коде) - C++
Помогите найти ошибку! Дана действительная квадратная матрица порядка 10. В строках с отрицательным элементом на главной диагонали найти...

Задача из Златопольского: "Найти числа с известным количеством делителей". Не могу найти ошибку - C++
Здравствуйте. Задача следующая: Найти все целые числа из промежутка от a до b, у которых количество делителей равно k. К примеру я взял...

найти ошибку - C++
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале , а потом все...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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