С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62
1

Scanf. Консоль после ввода символа закрывается

31.03.2014, 03:43. Показов 4507. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Простенький код c scanf, непонятно почему консоль после ввода символа закрывается. Среда Visua Studio 2012 Professional.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
 
void main()
{ 
    char;
    scanf("%s", &);
    
    printf("hello %s\n",);
    
 
    getchar();
 
}
Поставил system("pause"); вместо getchar, не закрывается. Но почему так, все равно интересует)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2014, 03:43
Ответы с готовыми решениями:

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

Закрывается программа после printf и scanf
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include...

Visual C++ 2012. Консоль. scanf(). Обработка ошибок ввода
Я использую процедуру scanf() для ввода даты через точку (типа 01.01.2000). Мне надо сделать так,...

Консоль закрывается после открытия
uses crt,graph; label poch,m1,m2; const mas:array of string=('1 - Zagolovok', '2- Zavdanya #1',...

13
...
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
31.03.2014, 07:24 2
phtnr, char это далеко не string. И вообще в C понятие строка есть нечто условное. Строка - это массив символов. Вот от этого и необходимо отталкиваться. Ваш пример:
C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
int main() {
    char ac[64];
    scanf("%s", ac);
 
    printf("hello %s\n", ac);
 
    system("PAUSE");
    return 0;
}
0
Заблокирован
31.03.2014, 08:34 3
scanf вот так брать строку нехорошо.
Во-первых, строка возьмется только до первого пробела.
Во-вторых, в буфере останется '\n', который и закрывает консоль.
0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
31.03.2014, 12:00 4
Страна дешевых понтовщиков. Знаний ноль, зато среда программирования - Профффессионал. И винда наверняка Максимальная. И Охвыс Ынтрыпрайз. Все, разумеется, ворованное. При этом внятно объяснить, какая из "профессиональных", "максимальных" и "ынтырпрайзных" функций ему столь необходима, вряд ли сможет. Зато профессионал, даже почти хакер! Не понимает он, что халява воспитывает из него человека с иждивенческим мировоззрением. В результате вырастает из него нищий, безынициативный ватник. Потому и нет у него денег на лицензионный софт. Он не потому ворует, что бедный, а бедный, потому что ворует.

Вот как надо делать:

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main()
{
    char buf[64];
    fflush(stdin);
    fgets(buf, sizeof(buf), stdin);
    printf("Hello, %s", buf);
    return 0;
}
За getchar() в конце программы я бы ставил кол в четверти. За system("PAUSE") - кол за год. Если так учит преподаватель, то его надо пороть публично на главной городской площади и ссылать в Сибирь чукч учить.
1
Заблокирован
31.03.2014, 12:54 5
Цитата Сообщение от Vtulhu Посмотреть сообщение
в Сибирь чукч учить
А это уже расизм.

Эк вас разобрало.

Добавлено через 39 минут
phtnr, несмотря на все неполиткорректные "волання" Vtulhu его предложение здраво, но имеет два минуса:
1) fgets забирает в строку '\n', что не всегда гуд
2) без getchar() консоль в Visua Studio закроется

Поэтому сделаем так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <string.h>
 
int main()
{
    char buf[64];
    fflush(stdin);
    fgets(buf, sizeof(buf), stdin);
    if(buf [strlen(buf)-1] == '\n')
         buf [strlen(buf)-1] = '\0';
    printf("Hello, %s", buf);
 
getchar(); 
    return 0;
}
0
Boleon
31.03.2014, 13:24
  #6

Не по теме:

/me записал себе в дневник, что чукч учить никогда нельзя, так как это расизм.

0
IrineK
31.03.2014, 14:05
  #7

Не по теме:

Писать дневники оч гламурно.:tender:

0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
31.03.2014, 15:29 8
Цитата Сообщение от IrineK Посмотреть сообщение
fgets забирает в строку '\n', что не всегда гуд
Это малюсенькая проблемка. Сущая мелочь по сравнению с потенциальными проблемами scanf.

Цитата Сообщение от IrineK Посмотреть сообщение
без getchar() консоль в Visua Studio закроется
Visual Studio для C? Патетичненько.
Надо нормально компилировать и запускать через cmd.exe.
Но вызывать системную утилиту из своего кода... Это уже ни в какие ворота не лезет. Ведь что происходит "за кулисами"? Вызывается cmd.exe и в нем исполняется команда pause. Почему сразу не запускать cmd?

Цитата Сообщение от IrineK Посмотреть сообщение
if(buf [strlen(buf)-1] == '\n')
Это условие никогда не выполнится. fgets всегда ставить нуль-терминатор. Да, и два раза strlen! И это при том, что гугль в первой же строчке дает решение: chomp и last_char_is.

Хотя мне больше нравится моя самописка:

C
1
2
3
4
5
6
7
8
9
10
void chomp(char* s)
{
    while( *s ) {
        if( *s == '\n') {
            *s = '\0';
            break;
        }
        ++s;
    }
}
Конечно, она неправильная, строго говоря, потому что удаляет все символы после первого же вхождения \n, а не только последний \n. Но в большинстве случаев (тот же fgets) это одно и то же.
0
Заблокирован
31.03.2014, 16:04 9
Цитата Сообщение от Vtulhu Посмотреть сообщение
Это условие никогда не выполнится
Проверьте на практике. Это условие выпиливает '\n' перед '\0'.

Добавлено через 27 минут

Не по теме:

Vtulhu Умерьте пыл. В своих посланиях вы оскорбили уже множество людей.
У вас на аватаре - человек в погонах. Вы знаете что такое честь офицера?
Гнать пургу, зная, что не получишь нормального отпора, это - низко.

0
Boleon
31.03.2014, 16:07
  #10

Не по теме:

IrineK,

Vtulhu Умерьте пыл. В своих посланиях вы оскорбили уже множество людей.
У вас на аватаре - человек в погонах. Вы знаете что такое честь офицера?
Гнать пургу, зная, что не получишь нормального отпора, это - низко.
а мне нравится такой подход, без сюсюканий, строго и по теме. :friends:

0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
31.03.2014, 17:04 11
Цитата Сообщение от IrineK Посмотреть сообщение
Проверьте на практике. Это условие выпиливает '\n' перед '\0'.
Да, действительно, что-то я перепутал. Но все равно решение плохое. Я дал ссылку на хорошее.

Цитата Сообщение от IrineK Посмотреть сообщение
Умерьте пыл. В своих посланиях вы оскорбили уже множество людей.
К сожалению, до большинства просто не доходит иначе. Вспоминается одна из серий "Осторожно, Модерн!", где двое новых русских решили научиться вести себя в обществе. В конце они выходят из здания и обращаются к тетке-уборщице, хлестнувшей их тряпкой по ногам: "Не будете ли вы так любезны, сударыня, дать нам пройти, после чего вновь приняться за свой почетный труд?". "Чавой? Сахарные, чёли!" - говорит уборщица, замахиваясь тряпкой. Ну тут двое братков мигом вспомнили свои прежние манеры.

Цитата Сообщение от IrineK Посмотреть сообщение
У вас на аватаре - человек в погонах. Вы знаете что такое честь офицера?
Нет, но я знаю, что такое девичья честь. Ее у меня тоже давно нет. Чему я очень рад. И вам советую избавиться от всяких психологических рудиментов. Прочтите книгу "Свобода от равенства и братства".

А "человек в погонах" - офицер танковых войск вермахта. Вы не подумайте чего плохого, нациков я презираю. Как и любой поцреотизм. Меня поразило выражение лица этого молодого человека. Ему бы в парке с девочкой (ну или там с мальчиком) гулять, а он на танке по Европам разъезжал. А все поцреоты.
0
IrineK
31.03.2014, 17:18
  #12

Не по теме:

Цитата Сообщение от Vtulhu Посмотреть сообщение
советую избавиться от всяких психологических рудиментов
Сурово. Но ссылка на "кыно" да "кныгы" вместо реалий жизни выдает пустышку.

0
1 / 1 / 1
Регистрация: 31.03.2014
Сообщений: 62
01.04.2014, 03:20  [ТС] 13
Извиняюсь что в путал в обсуждение работы строк. Изначально я делал для ввода 1 символа%c, потом пробовал для цифры и т.д, s случайно затесалось(. Мне интересно почему в таком случае getchar не работает, программа не ждет ввода символа.

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

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
 
int main()
{ 
    char,ad;
 
    scanf("%c", &);
    
    printf("hello %c\n",);
    
    ad = getchar();
    printf("%c", ad);
    
 return 0;
}
Цитата Сообщение от Vtulhu Посмотреть сообщение
Страна дешевых понтовщиков

Не по теме:


Ну что же Вы так, и винда у меня лицензионная, и антивирус, и специализированных прог баксов на 300 стоит. А вот ворд еще не ставил, раз такие упреки обязательно поставлю OO. Это я расписал только для того, чтоб вы дальше самоутверждались на чужом фоне, считая меня дешевым понтовщиком. Почти уже ватником.
А профессиональная у меня стоит, потому что нужно очень быстро было отредактировать программу. Упомянул в тексте на всякий случай, может именно из-за того что не совсем корректно создается в ней проект под си такое получается. Express ставился криво, но я уж обязательно переставлю. Слишком ли крута студия для С я не знаю, с чем имел знакомство, пусть и с более старой версией, то и поставил. Не, ну если вы прям сильно здесь недовольны, можно поставить что-нибудь другое, dev-c? Или что-нибудь порекомендуете ?
Ладн, кончаем смеяться. Да, и по лицу судить о характере человека, гиблое дело. Таким же макаром можно много хорошего про фотку Йозефа Менгеле понаписать, что изменится то?)

0
430 / 384 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
01.04.2014, 03:29 14
Цитата Сообщение от phtnr Посмотреть сообщение
Или что-нибудь порекомендуете ?
http://ru.wikipedia.org/wiki/Tiny_C_Compiler

http://ru.wikipedia.org/wiki/Sublime_Text
0
01.04.2014, 03:29
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.04.2014, 03:29
Помогаю со студенческими работами здесь

Консоль закрывается после открытия
Здравствуйте. Искал помощи по всему интернету,попал на ваш форум) Есть исходники...

После компиляции консоль не закрывается
Всем доброго время суток. Скачал и установил MinGW на Windows 7. Чтобы каждый раз не возится с...

Закрывается консоль после выполнения
Как в Microsoft visual basic 2012 сделать так что бы консоль не закрывалась сразу после выполнения...

Консоль закрывается сразу после старта
Вопрос в названии темы


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Test
mik-a-el 07.01.2025
Test
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru