Консультация № 189481
23.05.2016, 15:34
0.00 руб.
0 2 1
Здравствуйте! Прошу помощи в реализации на Си задачи:

Дан текстовый файл, содержащий таблицу стоимости товаров в виде:
Наименование: Цена. Записи имеют вид: Молоко 13.50. Вывести таблицу на экран, предварительно преобразовав записи к виду: Молоко 13 руб. 50 коп.

Напишите, пожалуйста, идею и комментарии к строкам!

Обсуждение

давно
Посетитель
7438
7205
31.05.2016, 12:59
общий
Адресаты:
В наименовании товара возможны пробелы? А цифры?
Впрочем, можно анализировать строку с концаНайти цену, тогда все остальное - наименование...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
31.05.2016, 13:44
общий
это ответ
Здравствуйте, dasha.com!
Где-то так...
[code h=200]
/*
Дан текстовый файл, содержащий таблицу стоимости товаров в виде:
Наименование: Цена.
Записи имеют вид: Молоко 13.50.
Вывести таблицу на экран, предварительно преобразовав записи к виду:
Молоко 13 руб. 50 коп.
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
FILE* file = fopen("article.txt", "r"); //открываем текстовый файл на чтение
char line[256];
int i, len, f;

SetConsoleCP(1251);
SetConsoleOutputCP(1251); //для вывода русских букв

if (!file)
{
printf("File article.txt not found!"); //файл не найден!
return 1;
}


while (fgets(line, 256, file)) //читаем строку, == NULL, если файл кончился
{
len = strlen(line)-1; //уменьшим на один символ, т.к. в конце строки ненужный '\n'
line[len] = 0; //и затрем его нулем

for(i=len-1; i>=0 ;i--) //начиная с адреса последнего символа
{
if (line[i] == ' ') //ищем пробел. Это будет конец названия
{
line[i] = 0; //закроем строку названия нулем
break;
}
}
printf("%s ", line); //выводим название

for(f=0,i++; i<len; i++) //флаг f = 0 или 1, если точка не найдена/найдена
{ //выводим с позиции за бывшим пробелом, а это начало цены!
if (line[i] == '.') //ищем точку, разделитель между руб и коп
{
f = 1; //точка найдена
break;
}
printf("%c", line[i]); //выводим цифры рублей
}
printf(" руб."); //подписуем
if (f) //точка была?
printf(" %s коп.\n", (char*)&line[i+1]); //выводим копейки, они с позиции i+1 и до конца строки
else
printf(" 00 коп.\n"); //если точки не было, будет 00 коп
}

fclose(file);
system("pause");
return 0;
}
[/code]

Примерный файлик article.txt
Код:

Молоко 10.50
Кислое молоко 12.60
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа