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

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

Kaldata.com - Форуми

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

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

Добре дошли!

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

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

 

Задача на С

Featured Replies

 

И трябва да отвориш файла във функцията, защото там си декларирал FILE* p. Дори и да си декларирал глобална променлива FILE* p и да си я асоциирал с файл някъде вън от функцията, това е друга променлива, недостъпна по този начин за функцията. По този начин функцията може да достъпи само локалната променлива FILE* p, но тя не е асоциирана с никакъв файл, следователно кодът няма да записва във файл.

 

 

Днес намерих този вариант

за отваряне на файл, но като го пусна ми дава error. http://postimg.org/image/p0jkxftr3/

{

   char ch, file_name[25];

   FILE *fp;

   printf("Enter the name of file you wish to see\n");

   gets(file_name);

 

   fp = fopen(file_name,"r"); // read mode

   if( fp == NULL )

   {

      perror("Error while opening the file.\n");

   }

   printf("The contents of %s file are :\n", file_name);

   while( ( ch = fgetc(fp) ) != EOF )

      printf("%c",ch);

   fclose(fp);

}

 

Това няма да работи добре, защото ако случайно не може да отвори файла ще отпечата текста на екрана и ще продължи с четенето му

  • Отговори 63
  • Прегледи 7,2k
  • Създадено
  • Последен отговор
  • Автор

Това няма да работи добре, защото ако случайно не може да отвори файла ще отпечата текста на екрана и ще продължи с четенето му

А този error знаеш ли от къде идва?

И трябва да отвориш файла във функцията, защото там си декларирал FILE* p. Дори и да си декларирал глобална променлива FILE* p и да си я асоциирал с файл някъде вън от функцията, това е друга променлива, недостъпна по този начин за функцията. По този начин функцията може да достъпи само локалната променлива FILE* p, но тя не е асоциирана с никакъв файл, следователно кодът няма да записва във файл.

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

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

А този error знаеш ли от къде идва?

Най-вероятно точно от това че не успява да отвори файла. като сложиш правилна обработка на грешката ще видим дали е така.

Е, аз не го съветвам да скрива името. 

 

Идеята ми е, че ако не съм видял някакво отваряне вън от функцията, пак съм прав. Мислех че е ясно.

Е, аз не го съветвам да скрива името. 

 

Идеята ми е, че ако не съм видял някакво отваряне вън от функцията, пак съм прав. Мислех че е ясно.

Ами нали уж учим хората. Та като е отворен въпрос за тия променливи, поне да си кажем кое как се прави.

А този error знаеш ли от къде идва?

Най вероятно от името, което въвеждаш. Има правила за имената на файлове. 

А, всъщност, ти отваряш за четене. Най вероятно грешката е от това, че отваряш несъществуващ файл.

Може да си дал неправилно разширение, или да си сбъркал името.

  • Автор

Най вероятно от името, което въвеждаш. Има правила за имената на файлове. 

А, всъщност, ти отваряш за четене. Най вероятно грешката е от това, че отваряш несъществуващ файл.

Може да си дал неправилно разширение, или да си сбъркал името.

Ми поиграх си като смених някои неща и засега върви ОК.

//

{

   char ch, file_name[100];

   FILE *fp;

   printf("Enter the name of file you wish to see\n");

   gets(file_name);

 

   fp = fopen(file_name,"r"); // read mode

   if( fp == NULL )

   {

      perror("Error while opening the file.\n");

   }

   else

   {

   printf("The contents of %s file are :\n", file_name);

   while( ( ch = fgetc(fp) ) != EOF )

      printf("%c",ch);

   fclose(fp);

}

}

//

Някой знае ли как се прави проверка на потребителския вход или проверка на потребителския вход?

Зависи от това, какво въвежда потребителя

  • Автор

Зависи от това, какво въвежда потребителя

Ами само числа в масивите, защото като натисна някой символ вместо число почва да Scroll-ва една стена от текст.

Примерно като проверяваш дали е прочетено нещо:

void PRIMARY_ARRAY() //INPUTS PRIMARY ARRAY ELEMENTS
{
   int index;
   for(index=0; index<MAX; index++) {
       printf("INPUT MAIN ARRAY ELEMENT [%d] OUT OF %d: ", index+1, MAX);
       fflush(stdin);
       if (scanf("%d", &PRIM_ARR[index])==0)index--;
   }
}

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

Ами само числа в масивите, защото като натисна някой символ вместо число почва да Scroll-ва една стена от текст.

 

Един вариант е да четеш входа от потребителя с gets, а след това проверяваш въведените символи един по един. Може с функцията isdigit, от ctype.h.

А може и ръчно, като знаеш, че десетична цифра е всеки символ в интервала '0' <= symbol <= '9'.

След като се убедиш, че потребителя е въвел само цифри, може да превърнеш символния низ в число или със sscanf или с atoi

Ако разрешаваш числа със знак, трябва да провериш, дали първия символ е '+' или '-'

По добър вариант според мен е да правиш проверката върху целия символен низ, който връща gets, направо с функцията atoi, и ако тя върне нула, да провериш, дали потребителя не е въвел числото 0. Ако не е, значи не е въвел число, а нещо друго.

А най добре, виж горния пост, щото е по добър вариант от всичко което написах.

Не видях, че е отговорено.

  • Автор

Предадох я и всичко е ок. Благодаря на всички за отделеното време :)

Надявам се в бъдеще и аз да мога да помагам.

  • 7 месеца по-късно...

Здравейте имам курсова работа а тя е:

Въведете произволни реални стойности за едномерния масив АL(М).Броят М се въвежда предварително  и е 10<М<50

Намерете минималния  и максималния елементи и техните индекси в масива.

На елементите от масива АL изчеслете.

-средно-аритметичната им стойност ,ако индекса на МIN е преди MAX

-сумата на квадратите им, ако индекса на МIN е след MAX в масива.

Създайте нов едномерен масив РОL,съдържащ само тези елементи от  АL,които се намират на нечетни индекси и са положителни.

Отпечатайте масивите,входиния и получения. 

Успях някак си да я направя до някъде  

#include <stdio.h>

#define M 50
 
void main()
{
float a[M], max;
    int i, m ;
 
 
//Въвеждане на броят м
 
do
{ printf("broi m > 10 && m < 50 " );
scanf("%d",&m); 
 
} while ( m < 10 && m > 50 );
 
//Въвеждане на числата в масива
 
printf("Vavedi %d chislata:\n",m);
 
for ( i = 0; i < m; i++)
{ printf(" element %d = ", i+1);
scanf("%f",&a);
}
 
}
// Търсене на max и nom 
 

Някой да помогне за по нататък 

Редакция
 
 

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

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

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

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

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

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

Профил

Навигация

Търсене

Търсене

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

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