Написать программу, которая: выводит текст на экран; определяет количество символов в самом коротком слове - C (СИ)
Формулировка задачи:
С помощью текстового редактора БЛОКНОТ создать файл, содержащий текст, длина которого не превышает 1000 символов (длина строки текста не должна превышать 70 символов).
Файл должен иметь расширение DAT.
Написать программу, которая:
- выводит текст на экран дисплея;
- определяет количество символов в самом коротком слове.
(На языке C, не С++)
------------
Вот тут получилось: вывести текст на экран и посчитать кол-во слов.
А определить количество символов в самом коротком слове никак не получается. Помогите пожалуйста со вторым заданием
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <process.h>
#include <string.h>
#include <Windows.h>
void menu(); //
FILE* openFile(char*);
void readAndWriteword();
void main()
{
setlocale(LC_CTYPE, "Russian");
system("cls");
fflush(stdin);
menu(); //вызов функции
}
//Меню программы
void menu()
{
int n = 0; //инициализация переменной
puts("Выберите следующее действие:\n 1 - Вывод текста из файла на экран. Вывод количества слов в файле. \n 2 - Выход");//вывод сообщения на экран
scanf_s("%d", &n);//ввод номера команды
switch (n)//выбор введенной программы
{
case 1: {readAndWriteword(); break; } //вывод текста и подсчет слов
case 2: {return; }//выход
default: menu(); //возвращение в меню
}
}
// Функция считывает и выводит содержание файла, а так же выводит количество слов
void readAndWriteword()
{
fflush(stdin);
char word; //объявление переменной
int count = 1; //инициализация переменной
char symble[70] = " "; //массив с пробелом
char *name = new char[80]; // массив символов
FILE *f; // объявление переменной
char *str = new char[70]; //массив символов
puts("\n Введите имя файла:"); //вывод на экран
gets_s(name, 79);//ввод имени файла
f = openFile(name); //вызов функции для открытия файла
puts("\n Содержимое файла \n"); //вывод на экран
if (!feof(f)) //если конец файла
{
word = fgetc(f); //считывание символа из файла
if (strchr(symble, word) != NULL) //если есть символ "пробел"
{
count++; //+1
}
while (!feof(f)) //пока не конец файла
{
printf("%c", word); //вывод символа
{
if (!feof(f)) //если не конец файла
{
word = fgetc(f); //считывание теста из файла
if (strchr(symble, word) != NULL) //если символ пробел
{
count++; //+1
}
}
}
}
puts("\n"); //вывод на экран
printf("%s", "Количество слов:"); //вывод на экран
printf("%d", count); //вывод на экран
puts("\n"); //вывод на экран
}
else
{
puts("Файл пуст!"); //вывод на экран
}
fclose(f); //закрытие документа
delete[]str; //удаление массива
menu(); //переход в меню
}
// Функция открытия файла
FILE* openFile(char* name)
{
setlocale(LC_CTYPE, "Russian");
system("cls");
fflush(stdin);
FILE* f; // объявление переменной
if ((fopen_s(&f, name, "r")) != 0) //если не удалось открыть файл
{
printf("Ошибка открытия файла\n"); //вывод на экран
menu(); //переход в меню
}
else
{
return f; //возвращение переменной с сылкой на открываемый файл
}
}Решение задачи: «Написать программу, которая: выводит текст на экран; определяет количество символов в самом коротком слове»
textual
Листинг программы
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 70
int main(int argc, const char *argv[])
{
FILE *fd;
char buff[MAX_LEN];
char *token, *delim = " \n\0";
unsigned int min_len, tmp;
if ((fd = fopen("./input.DAT", "r+")) == NULL) {
fprintf(stderr, "Open failed: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
min_len = MAX_LEN;
while (fgets(buff, sizeof(buff), fd) != NULL) {
printf("%sn", buff);
token = strtok(buff, delim);
while (token != NULL) {
min_len = min_len > strlen(token) ? strlen(token) : min_len;
token = strtok(NULL, delim);
}
}
printf("min_len = %d\n", min_len);
fclose(fd);
exit(EXIT_SUCCESS);
}