Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2017, 00:53   #1
tarstar
Пользователь
 
Регистрация: 18.11.2017
Сообщений: 18
По умолчанию Не выполняется условие if

Глупая ошибка: надо в условии == ставить
-------------------
Помогите, пожалуйста!
В функции nonePricipitation в цикле for почему-то не выполняется условие if, в следствии чего не выводятся номера массива (при значении массива равном нулю), если убрать условие, то выводятся все значения.
На фото видно, что значение массива под номером восемь равно нулю, но функция printf его не выводит.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 


int nonePricipilation (int pricipitation[], int pricipitationLg )
{

	srand(time(NULL));
	if (pricipitationLg <= 31)
	printf("\r\nDates without pricipitations:\r\n");
 	for (int i=1; i< pricipitationLg+1; i++)
 	{
 		pricipitation[i]=0+rand()%100;
 		
 		if (pricipitation[i] = 0)
 		printf ("day %i \r\n", i);
			 		
 	}

 	return 0;
}   

int main (void)
{
	
    int pricipitationLg=0;
    printf("Enter the length of pricipitation:");
    scanf("%dpricipitationLg\r\n",&pricipitationLg);
    
    
    int *pricipitation = malloc( pricipitationLg* sizeof(int));
    srand(time(NULL));
    if (pricipitationLg <= 31)
    	
    for (int i=1; i< pricipitationLg+1; i++)
    {
    	pricipitation[i]=0+rand()%100;
    	printf("pricipitation in %i day = %d mm\r\n", i, pricipitation[i]);
   	 		
    }
    
    else printf("You entered so much days for one month");
    nonePricipilation (pricipitation, pricipitationLg);
    
	return 0;
}
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
Изображения
Тип файла: jpg Xx3BZaN6lJA.jpg (86.0 Кб, 122 просмотров)

Последний раз редактировалось Serge_Bliznykov; 28.11.2017 в 09:45.
tarstar вне форума Ответить с цитированием
Старый 02.12.2017, 03:44   #2
Александр121
Форумчанин
 
Регистрация: 17.09.2017
Сообщений: 265
По умолчанию

for (int i=1; i< pricipitationLg+1; i++) // тут у вас i=1
for (int i=0; i< pricipitationLg+1; i++) // нужно с нуля начинать так как элементы массива считаются с нулевого элемента не с первого.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>



int nonePricipilation (int pricipitation[], int pricipitationLg )
{

	srand(time(NULL));
	if (pricipitationLg <= 31)
	printf("\r\nDates without pricipitations:\r\n");
 	for (int i=1; i< pricipitationLg+1; i++)
 	{
 		pricipitation[i]=0+rand()%100;

 		if (pricipitation[i] = 0)
 		printf ("day %i \r\n", i);

 	}

 	return 0;
}

int main (void)
{

    int pricipitationLg=0;
    printf("Enter the length of pricipitation:");
    scanf("%dpricipitationLg\r\n",&pricipitationLg);


    int *pricipitation = malloc( pricipitationLg* sizeof(int));
    srand(time(NULL));
    if (pricipitationLg <= 31)

    for (int i=0; i< pricipitationLg+1; i++)
    {
    	pricipitation[i]=0+rand()%100;
    	printf("pricipitation in %i day = %d mm\r\n", i, pricipitation[i]);

    }

    else printf("You entered so much days for one month");
    nonePricipilation (pricipitation, pricipitationLg);

	return 0;
}
Александр121 вне форума Ответить с цитированием
Старый 04.12.2017, 22:54   #3
tarstar
Пользователь
 
Регистрация: 18.11.2017
Сообщений: 18
По умолчанию

Цитата:
Сообщение от tarstar Посмотреть сообщение
Глупая ошибка: надо в условии == ставить
-------------------
Помогите, пожалуйста!
В функции nonePricipitation в цикле for почему-то не выполняется условие if, в следствии чего не выводятся номера массива (при значении массива равном нулю), если убрать условие, то выводятся все значения.
На фото видно, что значение массива под номером восемь равно нулю, но функция printf его не выводит.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>



int nonePricipilation (int pricipitation[], int pricipitationLg )
{

srand(time(NULL));
if (pricipitationLg <= 31)
printf("\r\nDates without pricipitations:\r\n");
for (int i=1; i< pricipitationLg+1; i++)
{
pricipitation[i]=0+rand()%100;

if (pricipitation[i] = 0)
printf ("day %i \r\n", i);

}

return 0;
}

int main (void)
{

int pricipitationLg=0;
printf("Enter the length of pricipitation:");
scanf("%dpricipitationLg\r\n",&pric ipitationLg);


int *pricipitation = malloc( pricipitationLg* sizeof(int));
srand(time(NULL));
if (pricipitationLg <= 31)

for (int i=1; i< pricipitationLg+1; i++)
{
pricipitation[i]=0+rand()%100;
printf("pricipitation in %i day = %d mm\r\n", i, pricipitation[i]);

}

else printf("You entered so much days for one month");
nonePricipilation (pricipitation, pricipitationLg);

return 0;
}
Цитата:
Сообщение от Александр121 Посмотреть сообщение
for (int i=1; i< pricipitationLg+1; i++) // тут у вас i=1
for (int i=0; i< pricipitationLg+1; i++) // нужно с нуля начинать так как элементы массива считаются с нулевого элемента не с первого.

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>



int nonePricipilation (int pricipitation[], int pricipitationLg )
{

	srand(time(NULL));
	if (pricipitationLg <= 31)
	printf("\r\nDates without pricipitations:\r\n");
 	for (int i=1; i< pricipitationLg+1; i++)
 	{
 		pricipitation[i]=0+rand()%100;

 		if (pricipitation[i] = 0)
 		printf ("day %i \r\n", i);

 	}

 	return 0;
}

int main (void)
{

    int pricipitationLg=0;
    printf("Enter the length of pricipitation:");
    scanf("%dpricipitationLg\r\n",&pricipitationLg);


    int *pricipitation = malloc( pricipitationLg* sizeof(int));
    srand(time(NULL));
    if (pricipitationLg <= 31)

    for (int i=0; i< pricipitationLg+1; i++)
    {
    	pricipitation[i]=0+rand()%100;
    	printf("pricipitation in %i day = %d mm\r\n", i, pricipitation[i]);

    }

    else printf("You entered so much days for one month");
    nonePricipilation (pricipitation, pricipitationLg);

	return 0;
}
я поэтому в цикле писал i < precipilation + 1, просто так удобнее числа считать, нулевого же нету) Ну можно было потом при выводе писать i+1, но по сути разницы нет
tarstar вне форума Ответить с цитированием
Старый 04.12.2017, 23:06   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
но по сути разницы нет
Разница есть и большая. Элемента с индексом precipilation просто нет, вам просто пока везет, что это память доступна и там ничего важного не хранится.

Прадставьте поезд: у него есть 10 вагонов и нумеруются они с 1. Но тут приходите вы в белом и говорите "Не нравится мне 1. Поэтому начну со второго вагона." Только вот 10 вагона, начиная со второго, не будет, хоть убейтесь об релься.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выполняется условие Nich. C# (си шарп) 0 27.11.2013 18:10
Не выполняется условие Astash Помощь студентам 2 03.12.2011 11:21
Не выполняется условие Ragnarek45 Общие вопросы Delphi 3 10.12.2010 15:08
не выполняется условие Link12 Общие вопросы C/C++ 6 30.03.2010 19:36
не выполняется второе условие if Division Общие вопросы C/C++ 5 24.12.2008 03:16