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

С клавиатуры вводятся символы, пока не встретится знак "?"

10.04.2018, 16:30. Показов 3308. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, подскажите, пожалуйста. Такая задача. Требуется - вводить символы до тех пор, пока не встретится знак "?" или количество введенных символов превысит 79. На экран вывести результат результат. Эта программа не реагирует на знак "?". В чем ошибка?

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
#include "stdio.h"
#include "string.h"
#include "locale.h"
#include <iostream>
 
void main()
{
    setlocale(LC_ALL, "Russian");
    char str[80];
    printf("\n Введите текст: ");
    fgets(str, 80, stdin); //cчитываем из потока ввода строку
    int i;
    for (i = 0; i < 80; i++)
    {
        if (str[i] == '\n')
        {
            str[i] = '?';
            {
                str[i] = '\0';
                break;
            }
        }
    }
    
    getchar();
    system("pause");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.04.2018, 16:30
Ответы с готовыми решениями:

С клавиатуры вводятся символы, пока не встретится точка
С клавиатуры вводятся символы, пока не встретится точка или количество введенных символов превысит...

С клавиатуры вводятся символы, пока не встретится символ '*'. На экран выводить код каждого введенного символа.
с первой частью программы я разобрался вот #include &lt;iostream&gt; #include &lt;string&gt; using...

В переменную а последовательно вводятся числа -9, 18, 2, 6, 7, 20, 11, -6. Найти сумму всех чисел до тех пор, пока не встретится 11
Помогите написать программный код: В переменную а последовательно вводятся числа -9, 18, 2, 6, 7,...

Пропустить все символы пока не встретится слово
Добрый день господа. Учусь регуляркам и пробую парсить html. Но вот возникла проблема, как мне...

Вводить числа с клавиатуры, пока не встретится задуманное число х.
Составьте программу к задаче 《вводить числа с клавиатуры, пока не встретится задуманное число х》.

7
Просто Лис
Эксперт Python
5731 / 3530 / 1055
Регистрация: 17.05.2012
Сообщений: 10,360
Записей в блоге: 9
11.04.2018, 10:18 2
Подозреваю, что надо читать посимвольно через getchar или ещё как.

Прочитали символ - сравнили с '?' - увеличили счётчик в цикле - читаем ещё.
0
Заблокирован
11.04.2018, 12:08 3
Что у Вас происходит в цикле "for"? Как минимум, есть подозрение, что в нем символы "?" и "\n" перепутаны местами.
Еще вопрос, зачем здесь "iostream"?
0
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,224
11.04.2018, 20:48 4
Проблема в том, что у терминала есть буфер, т.е. все символы, поступающие с клавиатуры, сначала попадают в буфер и накапливаются в нем, и только когда в буфер попадает контрольный символ, обычно это символ переноса каретки '\n', все накопленное содержимое передается в программу на обработку. Т.е. наша задача - прочитать всю поступившую из буфера ересь, при этом отловить в ней 80 символов и записать их в строку, либо отловить знак вопроса и записать все, что было до него в строку... Однако, что делать с оставшимися символами? Сами собой они никуда не денутся.

Например, нам поступила строка из 500 символов, все, что было до знака ? или до 80 символа, мы записали в строку, а куда мы денем оставшиеся 420 символов? Или у нас вдруг произошел сбой терминала, по какой-то причине оборвался поток ввода, что делать? Мы так и будем пытаться прочитать символ с несуществующего потока?

Я бы сделал что-то вроде этого (это очень приблизительный вариант, и я его не тестировал):
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
#include <stdio.h>
 
int main (void)
{
    char str[80];
    int max = 80;
    int n = 0;
    int c;
 
    printf("\bInput your string, please:\n");
    while ((c = fgetc(stdin)) != '?' && c != EOF)
    {
        if (n+1 > max) break;
        str[n++] = c;
    }
    str[n] = '\0';
    if (c != '\n' && c != EOF)      // если в потоке ввода еще остались символы
        while (c != '\n')
            c = fgetc(stdin);       // очищаем поток ввода
 
    printf("\n%s\n", str);
    getchar();
 
    return 0;
}
0
Заблокирован
11.04.2018, 21:19 5
Цитата Сообщение от stake-k26 Посмотреть сообщение
Я бы сделал что-то вроде этого
Так и там все работает, если тело цикла немножко подправить.

C++
1
2
3
4
5
if (str[i] == '\?')
{
      str[i] = '\0';
      break;
}
Цитата Сообщение от Николай1226 Посмотреть сообщение
В чем ошибка?
В том, что в теле цикла есть опечатки.
0
Просто Лис
Эксперт Python
5731 / 3530 / 1055
Регистрация: 17.05.2012
Сообщений: 10,360
Записей в блоге: 9
12.04.2018, 04:48 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
#include <conio.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
 
#define MAX 80
 
 
int main() {
    char str[MAX];
    int i;
    char ch;
    printf("Введите текст: ");
    for(i = 0; i < MAX; i++) {
        ch = getch();
        if (ch == '?') {
            break;
        }
        str[i] = ch;
    }
    str[i] = '\0';
    printf("%s", str);
}
0
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,224
12.04.2018, 15:18 7
Цитата Сообщение от student8102 Посмотреть сообщение
Так и там все работает
Интересно для кого я комментарии пишу? Или зачем? Если приходит такой вот студент, смотрит в книгу, видит ... а вот шут его знает, что он там видит, и выносит вердикт: все работает. Нет, дорогой мой, ни хрена там не работает. А почему не работает написано выше. Или у вас критерий работоспособности - это то, что программа запускается и выводит какой-то результат на экран?
0
Заблокирован
12.04.2018, 17:09 8
Я дал ответ на вопрос автора темы.
Цитата Сообщение от Николай1226 Посмотреть сообщение
Эта программа не реагирует на знак "?". В чем ошибка?
Про буфера вроде никто не спрашивал .
0
12.04.2018, 17:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2018, 17:09
Помогаю со студенческими работами здесь

В промежутке между символами с номерами от P1 до P2 удалить все символы, пока не встретится символ S2
Помогите с заданием, пожалуйста! Даны строка S1 и два числа P1 и P2 (P1 и P2 меньше длины...

Напишите программу, которая читает входные символы до тех пор, пока не встретится символ #
Здравствуйте помогите решить задачу. Напишите программу ,которая читает входные символы до тех...

Вводить числа с клавиатуры, пока не встретится 0. Подсчитать сумму всех * введенных нечетных чисел
Помогите,пожалуйста! По информатике задали...Язык паскаль Вводить числа с клавиатуры, пока не...

Дан текстовый файл. Напечатать символы с k1 по k2 в каждой строке. Символы k1 и k2 вводятся с клавиатуры
помогите закрыть сессию

С клавиатуры вводится фраза до тех пор, пока не встретится точка. Подсчитать количество слов во введенной фразе
Здравствуйте. Нужно выполнить вот такую задачу: С клавиатуры вводится фраза до тех пор, пока не...

C клавиатуры вводятся числа пока не будет
C клавиатуры вводятся числа пока не будет введен 0 определить количество четных и нечетных.


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

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