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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2016, 00:56   #1
zaira001002
Форумчанин
 
Аватар для zaira001002
 
Регистрация: 13.09.2012
Сообщений: 122
По умолчанию Работа со стандартным потоком ввода stdin (СИ)

Кто-нибудь объясните , пожалуйста, как запускать программу, работающая с файлом, в командной строке, вроде , при использовании stdin в программе, необходимо запускать ее с командной строки, чтобы связать ее с файлами, которые она будет запрашивать при запуске?
Пыталась запустить прогу в командной строке с помощью след., но ничего не происходило... и я явно делаю что-то не так): C:\...\программа.exe файл.txt. Даже пробовала и так: C:\...\gcc -std=c99 -Wall -Werrror -pedantic программа.exe файл.txt. ( в этом случае у меня выдает сообщение о том, что выполнение ld завершилось с кодом возврата 1):
Код:
#include <stdio.h>
#include <math.h>
#define NO_FILE -1
#define NO_NOMBERS 1
#define OK 0

int process(FILE* file, int* kol_pol)
{
	// если файла не существует - возвращает значение -1
	if (file == NULL) return NO_FILE;
	int a; //число в файле
	int num1, num2;
	int otr1, otr2;
	char c;
	rewind(file);
	// Если в файле не число - то возвращает значение 1
	while (fscanf(file, "%c", &c) != EOF)
	{	
		ungetc(c, file);
		//printf("%c", c);
		if (fscanf(file, "%c", &c) != 1) return NO_NOMBERS;
	}
	// если в файле все числа, то найдем количество смены знака
	// считываем число с файла и определяем , положительное ли оно
	rewind(file);
	fscanf(file, "%d", &a);
	num1 = a;
	(num1 >= 0) ? (otr1 = 1) : (otr1 = -1);
	while (fscanf(file, "%d", &a) != EOF)
	{
		num2 = a;
		(num2 >= 0) ? (otr2 = 1) : (otr2 = -1);
		if (otr1*otr2 == -1)  (*kol_pol)++;
		num1 = num2;
		otr1 = otr2;
	}
	return OK;
}

int main(void)
{
	int kol_pol = 0;

	FILE *fin;

	//ввод с консоли
	fin = stdin;
	
	if (process(fin, &kol_pol) == OK ) printf("%s %d %s", "count = ", kol_pol, "\n");
	getchar();

	return OK;
}
zaira001002 вне форума Ответить с цитированием
Старый 06.07.2016, 09:23   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,725
По умолчанию

Если хотите получать параметры из командной строки, то как минимум сообщите, что вы их хотите:
Код:
int main(int argc, char* argv[])
И тогда у вас в argv[1] будет имя вашего файла "файл.txt"
p51x вне форума Ответить с цитированием
Старый 06.07.2016, 10:18   #3
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Кроме того, есть перенаправление ввода/вывода консоли.
Если есть текстовый файл с вводимыми данными InFile.txt, то можно запустить программу
Код:
program.exe < InFile.txt
Так для программы
Код:
#include <iostream>

using namespace std;

int main()
{
    int x;
    for(int i=0; i<10; i++)
    {
        cin >> x;
        cout << "Hello world!" << 2*x << endl;
    }
    return 0;
}
И входного файла InFile.txt
Код:
1
2
3
4
5
6
7
8
9
10
После запуска
Код:
program.exe < InFile.txt > OutFile.txt
Получим выходной файл OutFile.txt
Код:
Hello world!2
Hello world!4
Hello world!6
Hello world!8
Hello world!10
Hello world!12
Hello world!14
Hello world!16
Hello world!18
Hello world!20

Последний раз редактировалось FPaul; 06.07.2016 в 10:27.
FPaul вне форума Ответить с цитированием
Старый 06.07.2016, 10:34   #4
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

А еще можете буфер объекта типа ifstream подцепить с cin
Croessmah вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоком nibufep Общие вопросы Delphi 4 09.09.2015 14:32
Работа со стандартным графическим модулем dbrf Помощь студентам 1 18.01.2015 21:56
Работа с потоком Yur@ Общие вопросы Delphi 3 02.06.2011 12:46
Работа с stdin в ansi c Ru_DoLF Общие вопросы C/C++ 2 03.04.2011 19:48
Работа со стандартным help'ом Гришас Помощь студентам 4 21.03.2007 16:07