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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2015, 13:30   #1
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию вопросик по массивам на С

Всем привет!
ну во первых с праздником всех влюблённых в С))))
а во вторых может кто либо объяснить мне почему в функции инит первое прохождение цикла требует ввести 2 числа................? ломал голову долго(

Код:
#include <stdio.h>
#define ROW 3
#define COL 5
void init(int mat[][COL])
{
	int i, k;
	for (i = 0; i < ROW; i++)
	{
		for (k = 0; k < COL; k++)
		{
			printf("Enter number in array\n");
			scanf("%d\n", &mat[i][k]);
		}
	}
	printf("\n\n\n");
}
void print(int mat[][COL])
{
	int i, k;
	for (i = 0; i < ROW; i++)
	{
		for (k = 0; k < COL; k++)
		{
			printf("%d\t",mat[i][k]);
		}
		printf("\n");
	}
}
void main()
{
	int mat[ROW][COL];
	init(mat);
	print(mat);
}
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 14.02.2015, 14:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
scanf("%d\n", &mat[i][k]);
\n убери. scanf его и так из буффера ввода подберет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2015, 15:04   #3
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

буффера ввода, не поясните что это?
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 14.02.2015, 15:15   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну это такой поток, который работает с клавиатурой и экраном.
STDIN - входной буффер. Некий массив байт (для консоли символов), который пользователь вводит с клавиатуры или с HID какого-нить. Винда сама его наполняет по мере получения с устройства ввода данных.

STDOUT - выходной буффер, по факту то что в консоли отображается. Тоже можно назвать массивом. По-моему даже где-то в винде его размер мона настроить.
scanf() считывает данные из STDIN.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2015, 15:19   #5
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

ага, ясно а почему \n все же влияет на ситуацию не пойму..............
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 14.02.2015, 15:25   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Потому что scanf() считывает двумя так сказать этапами. Сначала то что описано в формате - в твоем случае это число и символ ввода, а потом стандартный завершающий ввод символ. Т.е получается примерно так:
1) Ты ввел 123 и Энтер.
2) scanf согласно %d\n считал из буффера 123 и сам энтер
3) Буффер пуст, scanf на втором своем этапе не видит символа завершения ввода (поскольку он на первом этапе был выбран из буффера ввода), поэтому ждет.

Эх молодежЪ молодежЪ... Совсем не желаете отладчик включить.
Как же интересно мне ты будешь поступать, если вдруг на работе тебе принесут чужой проект, и дадут команду "фас" на его допиливание? Тоже будешь интернет выстукивать в поисках ответов?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2015, 15:34   #7
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Потому что scanf() считывает двумя так сказать этапами. Сначала то что описано в формате - в твоем случае это число и символ ввода, а потом стандартный завершающий ввод символ. Т.е получается примерно так:
1) Ты ввел 123 и Энтер.
2) scanf согласно %d\n считал из буффера 123 и сам энтер
3) Буффер пуст, scanf на втором своем этапе не видит символа завершения ввода (поскольку он на первом этапе был выбран из буффера ввода), поэтому ждет.

Эх молодежЪ молодежЪ... Совсем не желаете отладчик включить.
Как же интересно мне ты будешь поступать, если вдруг на работе тебе принесут чужой проект, и дадут команду "фас" на его допиливание? Тоже будешь интернет выстукивать в поисках ответов?
то есть вы хотите сказать что ентер тоже самое что и \n и поэтому он его считывает когда я нажимаю ентер в конце?
П.С мне уже давали проект допиливать на C#, по нету лазил пока не понял)))
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 14.02.2015, 16:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
вы хотите сказать что ентер тоже самое что и \n и поэтому он его считывает когда я нажимаю ентер в конце?
Т.е. ты хочешь сказать что не знаешь что пишешь в коде?
Зачем же тогда пишешь то что неведомо как будет работать?
Да. \n это спецификатор перевода каретки, И тебе прежде чем писать его где-попало стоит почитать в MSDN о подобных инструкциях.
Цитата:
не уже давали проект допиливать на C#, по нету лазил пока не понял)))
И не поймешь. Можешь даже не пытаться, пока не догадаешься о чем я толкую.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.02.2015, 17:19   #9
nwhta
Форумчанин
 
Регистрация: 30.08.2013
Сообщений: 153
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Т.е. ты хочешь сказать что не знаешь что пишешь в коде?
Зачем же тогда пишешь то что неведомо как будет работать?
Да. \n это спецификатор перевода каретки, И тебе прежде чем писать его где-попало стоит почитать в MSDN о подобных инструкциях.

И не поймешь. Можешь даже не пытаться, пока не догадаешься о чем я толкую.
вы так негативны ко мне?) все же я программы пишу, и думаю что каждый был новичком и что то не до понимал)
П.С а в мсдн правда по этой теме не смотрел ещё но гляну.
больше знаю, лучше сплю)
nwhta вне форума Ответить с цитированием
Старый 14.02.2015, 17:36   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
scanf("%d\n", &mat[i][k]);
Ты мне вот скажи, что ты хотел сделать таким кодом?
Т.е. я понимаю, как можно ошибиться и что-то не понимать. Но я как-то всегда знал к какой цели надо стремиться и писал только такой код, который помогал решить проблему.
А тут у вас проблемы не было вообще, пока вы не поставили \n, и как-то еще оказалось, что вы не знаете что это такое вообще.

Цитата:
П.С мне уже давали проект допиливать на C#, по нету лазил пока не понял)))
И что же это был за проект?

Последний раз редактировалось rrrFer; 14.02.2015 в 17:39.
rrrFer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросик) Sashka_BezDelnik Компоненты Delphi 1 29.12.2012 21:38
Вопросик! Igormak Компьютерное железо 2 23.06.2011 21:17
Вопросик по массивам krabuduk Общие вопросы C/C++ 6 23.05.2009 21:24