Чтение символов с клавиатуры

Нам задали написать прогу которая читает символы с клавиатуры в Borland C. Помогите плз.

Цель: создание комплексных программ, используя текстовые файлы и функции в языке программирования C++.

Читает символы с клавиатуры (введение заканчивается нажатием «Enter»), записывает их в файл, затем прочитывает их из файла и вычисляет, сколько цифр, делящихся без остатка на 3, было введено.

getchar

Так?

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

//Структура для представления результата чтения числа
typedef struct _read_number_result_struct
{
    int number; //Собственно, число
    int fail;   //=1, если число не прочитано

} read_result;

//Функция чтения числа из стандартного потока
read_result get_number();



int main(void)
{
    char filename[100]; //Имя файла
    FILE *file; //Файл ввода\вывода чисел

    //Читаем имя файла и пытаемся его открыть
    puts("Enter filename: ");
    scanf("%s", filename);
    getchar();

    file = fopen(filename, "w");

    if ( file == NULL )
    {
        printf("Can not open file \"%s\"!\n", filename);
        return 1;
    }

    //Если файл удалось открыть, читаем числа и записываем их в файл
    puts("Enter numbers: ");

    read_result res;
    res.fail = 0;

    while ( (res = get_number()).fail != 1 )
    {
        fprintf(file, "%d ", res.number);
    }

    //Закрываем файл
    fclose(file);

    //Снова открываем его, но теперь на чтение
    file = fopen(filename, "r");

    //Читаем числа
    int num;    //Текущее число
    int count = 0; //Счётчик чисел, нацело делящихся на 3

    while ( fscanf(file, "%d", &num) != EOF )
    {
        if ( num % 3 == 0 )
            count++;
    }

    fclose(file);

    printf("Number of elements evenly divisible by 3: %d\n", count);

    return 0;
}


read_result get_number()
{
    read_result result; //Результат работы функции
    result.number = result.fail = 0;

    char numb_str[100]; //Строка для чтения числа
    int i = 0;
    int c;

    //Читаем число по-символьно. Записываем символы в numb_str
    do
    {
        c = getchar();
        numb_str[i++] = c;

    }while( isalnum(c) );
    numb_str[i] = 0;

    //Если прочиатная строка пустая, возвращаем значение fail
    if ( numb_str[0] == '\n' )
    {
        result.fail = 1;
        return result;
    }
    else if( numb_str[i-1] == '\n' ) //Если последний символ enter, то возвращем его в поток
    {       
        ungetc(c, stdin);
    }

    //Иначе преобразуем строку в число
    result.number = atoi(numb_str);

    //И возвращаем результат
    return result;
}

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

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

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

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.