Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2017, 08:53   #1
AniGeek
Пользователь
 
Регистрация: 23.02.2017
Сообщений: 33
По умолчанию printf / scanf C

Linux
Vim
GCC

Доброго времени суток!
Получается вводить и выводить числа на C, а слова не получается. Как поправить?

Код:
#include <stdio.h>

int main() {
         int goda;
         printf("Сколько вам лет: ");
         scanf("%d", &goda);
         printf("Вам %d \n", goda);
         
         return 0;
}
Работает!

Код:
#include <stdio.h>

int main() {
	char imena;
	printf("Ваше имя: ");
	scanf("%c", &imena);
	printf("Вас зовут %c \n", imena);

	return 0;
}
Выводит только первую букву (Работает не так как ожидалось)

Код:
#include <stdio.h>

int main() {
	char imena;
	printf("Ваше имя: ");
	scanf("%s", &imena);
	printf("Вас зовут %s \n", imena);

	return 0;
}
Не компилируется!
1337.c: In function ‘main’:
1337.c:7:29: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("Вас зовут %s \n", imena);

Он ругается на "%s" или на char?
Пытался написать '%s' тоже не работает.....

Последний раз редактировалось Alex11223; 23.02.2017 в 09:01.
AniGeek вне форума Ответить с цитированием
Старый 23.02.2017, 09:01   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

char это 1 символ, а не массив.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.02.2017, 11:05   #3
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,529
По умолчанию

Ознакомься с кодом здесь:
http://programmersforum.ru/showpost....0&postcount=65

Сообщаю список твоих ошибок.
Ты задал символ char imena. Символ - это 1 байт, вот туда только одна буква и помещается. Что он тебе и вывел.

Строка - это массив символов. То есть для работы со строками в C используется массив char imena [80]. Читай внимательно учебник.
Адрес такого массива - imena (а не &imena).

Для работы со строками в функции scanf нужно использовать формат ввода %s, а %c только 1 символ вводит, и всё.
И всё равно в такой ситуации надо использовать не scanf (), а gets () из библиотеки <stdlib.h>, потому что scanf () берёт строку до первого пробела, а gets () - до нажатия <Enter>.

Формат вывода строки - printf (), но не %c (он только 1 символ выводит), а %s, причём указывать надо адрес массива.

----------

А когда ты перейдёшь на Visual C++ или Visual Studio, то там для работы со строками есть специальный класс CString, который гораздо более гибкий, чем просто работа с массивами.

Цитата:
Он ругается на "%s" или на char?
Пытался написать '%s' тоже не работает.....
Он ругается на то, что ты задал char imena (то есть символ), и пытаешься в printf () интерпретировать этот символ как адрес массива, якобы содержащего строку (по формату вывода строки %s).
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 23.02.2017, 11:20   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от jura_k Посмотреть сообщение
Адрес такого массива - imena (а не &imena)
А &imena не адрес что ли?

Цитата:
Сообщение от jura_k Посмотреть сообщение
А когда ты перейдёшь на Visual C++ или Visual Studio, то там для работы со строками есть специальный класс CString, который гораздо более гибкий, чем просто работа с массивами.
CString это сторонняя С++ библиотека (MFC). Есть еще куча библиотек со своими классами для строк, причем более удобными и кроссплатформеными.
Например QString в Qt.
В стандартном С++ есть std::string.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.02.2017, 11:25   #5
AniGeek
Пользователь
 
Регистрация: 23.02.2017
Сообщений: 33
По умолчанию

Alex11223 и jura_k спасибо вам обоим!

На ответ Alex11223 я загуглил "Массивы для символов на C" или что то на подобие! И нашёл тип[char] переменная[imena] количество символов[80]

Но без jura_k я бы не сразу догадался убрать знак & перед imena

Вот, всё работает!

Код:
#include <stdio.h>

int main() {
	char imena[80];
	printf("Ваше имя: ");
	scanf("%s", imena);
	printf("Вас зовут %s \n", imena);

	return 0;
}
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 23.02.2017 в 11:40.
AniGeek вне форума Ответить с цитированием
Старый 23.02.2017, 11:50   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

&imena тоже будет работать, только будет варнинг про разные типы указателей.
imena и &imena[0] будет без варнинга.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
%ls и %lc в printf и scanf Krasiosoft Помощь студентам 2 08.07.2015 22:30
netbeans ждем scanf и не показывает printf morg4n Общие вопросы C/C++ 1 22.05.2013 00:17
printf печатает последнее введеное в scanf aktec Помощь студентам 9 07.03.2011 20:41
лабораторная работа printf/scanf elenai Общие вопросы C/C++ 2 27.12.2010 10:47
лабораторная работа С++(printf/scanf) elenai Помощь студентам 0 26.12.2010 21:50