Консультация № 185886
23.04.2012, 17:21
99.00 руб.
0 6 1
Здравствуйте! Прошу помощи в следующем вопросе:
Программа на С.
Ввести с клавиатуры строчки до тех пор пока введенная строка не будет соответствовать команде выхода(указать в коде). Способ ввода свободный. Каждую введеную строку вводить в файл в виде:
1)
2)
3)
...

Обсуждение

Неизвестный
23.04.2012, 17:36
общий
С комментариями плз_)
давно
Профессор
399103
482
23.04.2012, 17:39
общий
это ответ
Здравствуйте, Посетитель - 393219!

C++:

Код:

#include <iostream>
#include <fstream>
#include <string>

int main()
{
const std::string stop_string = "stop";
std::string curr_string;

std::ofstream file;
file.open( "log.txt", std::ios::out );
if( file.fail() )
return -1;

std::cin >> curr_string;
for( int i = 1; curr_string != stop_string; ++i )
{
file << i << ")" << curr_string << "\n";
std::cin >> curr_string;
}

//system("pause");

return 0;
}


C:

Код:

#include <stdio.h>
#include <string.h>

int main()
{
const int BUF_SIZE = 64;

const char* stop_string = "stop";
char curr_string[BUF_SIZE];

FILE* file;
file = fopen( "log.txt", "w" );
if( 0 == file )
return -1;

scanf( "%s", curr_string );
for( int i = 1; 0 != strcmp(curr_string, stop_string); ++i )
{
fprintf( file, "%i)%s\n", i, curr_string );

scanf( "%s", curr_string );
}

fclose( file );

//system("pause");

return 0;
}
давно
Профессор
399103
482
23.04.2012, 17:51
общий
23.04.2012, 18:07
А что именно вызывает вопросы? Т.е. интересуют комментарии в духе К.О.: "открываем файл", "сравниваем строки", или есть конкретное непонятное место?
давно
Профессор
399103
482
23.04.2012, 18:06
общий
Да, и подразумевалось, что код может быть и на C и на C++ или только на C?
Неизвестный
23.04.2012, 19:43
общий
Только на С. Коментарии нуу практически в духи КО). Вот эти строчки что исполняют?
С
char curr_string[BUF_SIZE];

if( 0 == file )
return -1;

scanf( "%s", curr_string );
давно
Профессор
399103
482
23.04.2012, 19:58
общий
23.04.2012, 20:02
Цитата: 393219
char curr_string[BUF_SIZE];

Здесь мы создаём массив char в стеке размером, указанным в константе BUF_SIZE. Таким образом, curr_string имеет тип char* - указатель на char - причём указывает он на начало области памяти этого массива. Т.е. curr_string == &curr_string[0].

Цитата: 393219
if( 0 == file )
return -1;

Функция fopen возвращает указатель на файловый дескриптор, если открыть файл удалось, и 0 - если нет. Т.о. здесь условие - если файл не открылся, завершаем работу и возвращаем -1(как правило, main возвращает 0, если всё было хорошо).

Цитата: 393219
scanf( "%s", curr_string );

scanf - функция форматированного ввода. Её аргументы - строка, описывающая формат данных, которые сейчас поступят и указатели на переменные, куда записывать эти данные. %s означает, что будет строка.
В форматированном выводе всё похоже:
Код:
fprintf( file, "%i)%s\n", i, curr_string );

%i - целое число, ) - просто символ, %s - строка, \n - символ перевода строки.

Описания форматной строки, например, тут
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
или в классической книжке Кернигана и Риччи "Язык программирования C".

PS. Или вот ещё полезный пост: http://www.rsdn.ru/forum/cpp/1128588.1.aspx
Форма ответа