С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
sky123
2 / 2 / 1
Регистрация: 03.11.2014
Сообщений: 121
1

Избавиться от лишнего '\n' при получении названия переменной

27.10.2016, 19:35. Просмотров 827. Ответов 6
Метки нет (Все метки)

Добрый день, вот код, когда срабатывает первый scanf, он получает 2 символа: буква и '\n'. И из-за этого в цикле мы записываем '\n' в массив. Как решить эту проблему? Заранее спасибо.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
void main() {
    char button;
    printf("Do you want to code or decode? Press c or d:\n");
    char a;
    scanf_s("%c", &a);
    if (a == 'd') {
        printf("\nVively d");
    }
    else if (a == 'c') {
        printf("\vVi vveli c");
    }
    char b = 'a';
    char array[100];
    for (int i = 0; b != '\n'; i++)
    {
        scanf("%c", &b);
        array[i] = b;
    }
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2016, 19:35
Ответы с готовыми решениями:

Освобождение ресурсов при получении терминирующего сигнала
Здравствуйте уважаемые. Я только изучаю Си, и столкнулся с такой проблемой....

Как избавиться от лишнего столбца на странице ASP?
При отображении таблицы на странице ASP справа появляется пустой столбец,...

Зацикливание при получении получении сообщения от клиента
Доброго времени суток! Уже выбился из сил... Суть моей проблемы в следующем....

как избавиться от присваивания процессорного времени переменной при работе циклов?
#include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;math.h&gt; #include &lt;stdlib.h&gt;...

Помощь в получении переменной из PHP
Ребят, нужна помощь. Я запутался совсем, разбираюсь с PHP и не могу понять. ...

6
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4838 / 2483 / 695
Регистрация: 18.10.2014
Сообщений: 4,291
27.10.2016, 21:51 2
Лучший ответ Сообщение было отмечено sky123 как решение

Решение

Цитата Сообщение от sky123 Посмотреть сообщение
Как решить эту проблему?
Читать документацию на scanf_s и то, как этой функцией пользоваться. Как эта функция вообще попала в вашу программу, если вы не знаете как ей пользоваться?
1
sky123
2 / 2 / 1
Регистрация: 03.11.2014
Сообщений: 121
10.11.2016, 01:48  [ТС] 3
TheCalligrapher, проблема актуальна, как прочитать только 1 символ, если в scanf_s указать, чтобы она читала только 1 символ, то все равно читается знак переноса строки. Как считать только 1 символ?
0
easybudda
10.11.2016, 02:02
  #4

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как эта функция вообще попала в вашу программу, если вы не знаете как ей пользоваться?
Мелкостудия подсказала обругав стандартную scanf(), как "небезопасную". Это не та scanf_s, которая в ANSI C 11 обозначена...

0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4838 / 2483 / 695
Регистрация: 18.10.2014
Сообщений: 4,291
10.11.2016, 02:04 5
Для майкрософтовского scanf_s сначала

C
1
scanf_s("%c", &a, 1);
потом в цикле

C
1
scanf_s(" %c", &b, 1);
0
easybudda
Модератор
Эксперт CЭксперт С++
10157 / 6062 / 1525
Регистрация: 25.07.2009
Сообщений: 11,496
10.11.2016, 02:08 6
sky123, один из правильных способов - добавить функцию для очистки ввода (fflush(stdin) - крайне неправильный способ!)
C
1
2
3
4
5
6
void flush_input(void) {
    char c;
    
    while ( scanf("%c", &c) == 1 && c != '\n' )
        ;
}
и вставлять её после чтения символа:
C
1
2
scanf("%c", &a);
flush_input();
А чтобы отучить мелкостудию на стандартные функции ругаться, самой первой строкой добавьте
C
1
#define _CRT_SECURE_NO_WARNINGS 1
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
4838 / 2483 / 695
Регистрация: 18.10.2014
Сообщений: 4,291
10.11.2016, 02:12 7
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
потом в цикле
C
1
scanf_s(" %c", &b, 1);
Правда так будут игнорироваться все пробельные символы, в т.ч. первод строки. В результате из цикла нельзя будет выйти... Нехорошо.
0
10.11.2016, 02:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2016, 02:12

Очень много лишнего в коде но без этого "лишнего" не работает
Сильно не пинайте я месяц как Delphi изучаю. Заранее благодарен. procedure...

Избавиться от глобальной переменной
#include &lt;iostream&gt; // подключаем ввод/вывод #include...

СЛАУ - избавиться от лишней переменной
Помогите избавиться от лишней переменной в СЛАУ. M - 10 N - 7, если эти...


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

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

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