Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Помощ за C програма

Featured Replies

Здравейте. Може ли някой да ми помогне с една тежка задача, с която се мъча вече 2 дена. Условието е следното:

Да се състави програма на C, която чете C програма и намира:

-броят на редовете в програмата

-броят на операторите за разклонение if и if/else;

Програмата да започва с меню със следните опции:

* четене на програмата от файл и запис на резултата във файл (потребителят трябва да въведе имената на двата файла, като файла с програмата трябва да завършва на ".C");

* четене на програмата от файл и извеждане на резултата на екрана (файлът въведен от потребителя да завършва на ".C");

* четене на програмата от клавиатурата и извеждане във файл зададен от потребителя;

* четене на програмата от клавиатурата и извейдане на екрана;

Програмата да се реализира в отделни функции. Четенето от файла да става по редове.

 

Аз съм начинаещ и нямам нито много познания, нито много опит, но това измислих до сега:

 

#include <stdio.h>
#include <string.h>
#define MAX 200
int fileSave(FILE * fp2);
int fileShow(FILE * fp1);
void inputText(FILE * fp2);
 
 
main()
{
char option;
char filename[MAX];
char savefile[MAX];
FILE * fp1;
FILE * fp2;
 
printf("Enter the number of your choise:\n\n");
printf("1. Read from file and save result to file. \n");
printf("2. Read from file and show result on screen.\n");
printf("3. Read from keyboard and save result to file.\n");
printf("4. Read from keyboard and show on screen.\n");
 
 
do{
scanf_s("%d", &option);
printf("\n");
 
 
 
switch (option)
{
case 1 : 
printf("What is the name of the file you want to open? \n");
scanf("%s", filename);
printf("What is the name of the file you want to save to? ");
scanf("%s", savefile);
 
if ((fp1 = fopen(filename, "r")) == NULL)
{
printf("Invalid file.");
}
if ((fp2 = fopen(savefile, "w+")) == NULL)
{
printf(" Invalid filename!");
}
 
fileSave(fp2);
fileShow(fp1);
 
break; 
 
 
case 2 :
printf("What is the name of the file you want to open? \n");
scanf("%s", filename);
if ((fp1 = fopen(filename, "r")) == NULL)
{
printf("Invalid file.");
}
fileShow(fp1);
break; 
 
case 3: 
inputText(fp1);
break;
 
case 4 : 
inputText(fp2);
break;
 
default: printf("Invalid choise!\n");
break;
 
}
while (option != 4 );
fclose(fp1);
 
 
}
 
void fileSave(FILE * fp2)
{
rewind(fp2);
int rows1 = 0;
 
int i;
 
while ((i = getc(fp2)) != EOF)
{
if (i == 10)
{
rows1++;
break;
}
}
 
printf("ROWS in the file for save are: %d", rows1);
 
rewind(fp2);
 
int count = 0;
int n;
 
while ((n = getc(fp2)) != EOF)
{
if (n == 105)
n = fgetc(fp2);
if (feof(fp2))
break;
if (n == 102)
 
break;
count++;
 
}
printf("ifs count is: %d", count);
 
 
}
 
 
int fileShow(FILE * fp1)
{
rewind(fp1);
 
int rows = 0;
int i;
 
while ((i = getc(fp1)) != EOF)
{
if (i == 10)
{
rows++;
}
}
 
printf("ROWS in the opened file are: %d", rows);
 
rewind(fp1);
int count = 0;
int n;
 
while ((n = getc(fp1)) != EOF)
{
if (n == 105)
n = fgetc(fp1);
if (feof(fp1))
break;
if (n == 102)
 
break;
count++;
 
}
printf("ifs count is: %d", count);
 
 
}
 
 
 
 
void inputText(FILE * fp1, FILE * fp2) {
char arr[MAX];
char *ch;
 
while ((ch = getchar()) != EOF){
putc(ch, fp1);
}
}
 
Благодаря предварително! :)

За четене на цели редове използвай функцията fgets(). След това можеш да ги анализираш за if, else и още каквото е нужно. Можеш да прочетеш повече за функцията fgets ТУК. Има и пример :).

 

Също моля те ползвай тага code (намира се на лентата с инструменти на редактора и иконата му изгелжда така < >). Това ще запази форматирането на кода и ще го оцвети.

Редактирано от Bfaf (преглед на промените)

За четене на цели редове използвай функцията fread().

Имаш предвид fgets? fread чете на блокове с предварително зададен размер, а няма никакъв начин предварително да знаеш, колко точно е голям съответният ред...

Иначе fread е по-добрият избор, защото няма особена полза да парсваш C програма на редове, при положение, че синтаксисът на езика изобщо ги игнорира.

Имаш предвид fgets? fread чете на блокове с предварително зададен размер, а няма никакъв начин предварително да знаеш, колко точно е голям съответният ред...

Иначе fread е по-добрият избор, защото няма особена полза да парсваш C програма на редове, при положение, че синтаксисът на езика изобщо ги игнорира.

 

Прав си :). По-добре да е fgets. Промених си поста по-горе.

Прав си :). По-добре да е fgets. Промених си поста по-горе.

Ама ми четеш постовете, като дявола - евангелието :). Точно отдолу писах, що не е по-добре да е с fgets.

Редактирано от flare (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.