Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
1

printf в цикле выводит сообщение несколько раз

24.11.2011, 22:27. Показов 6374. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код:
C
1
2
3
4
5
6
7
8
for (i=0; i<n; i++)
            for (j=0; j<n; j++)
            {
                if (a[i][j]!=0)
        printf ("Парам-пам-пам-пам");
    else
        printf ("лыфрващшуырв");
            }
Вот цикл с матрицей размером, к примеру, 2х2. У меня сообщение принтфа выводит 4 раза слитно. Как сделать, чтоб выводило один раз?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2011, 22:27
Ответы с готовыми решениями:

Printf в цикле while выводит лишнюю строку
Доброго времени суток. Помогите разобраться новичку. Цель: Строка Znachenie= должна отображаться...

Сложение числа несколько раз в цикле
нужно решить задачки,помогите пожалуйста: 1.Число 2 складывается 10 раз,нужно вычислить с помощью...

SLQ запрос выводит несколько раз одну и туже строку
День добрый. Запрос начал выдавать результат копируя строки и выдавая их по несколько раз. В...

Почему вместо нужных значений программа выводит несколько раз -6.227744e+66?
считываю матрицу чисел из файла double bufDownloadVector; std::ifstream...

11
12 / 12 / 5
Регистрация: 15.11.2010
Сообщений: 256
24.11.2011, 22:34 2
Цитата Сообщение от Johnlion Посмотреть сообщение
Есть код:
C
1
2
3
4
5
6
7
8
for (i=0; i<n; i++)
            for (j=0; j<n; j++)
            {
                if (a[i][j]!=0)
        printf ("Парам-пам-пам-пам");
    else
        printf ("лыфрващшуырв");
            }
Вот цикл с матрицей размером, к примеру, 2х2. У меня сообщение принтфа выводит 4 раза слитно. Как сделать, чтоб выводило один раз?
задачу в чем заключается кинь задачу.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 22:37 3
Если определить, имеются ли нулевые элементы, то можно так

C
1
2
3
4
5
6
int flag = 0;
for (i=0; i<n; i++)
          for (j=0; j<n; j++)
                 if (a[i][j]==0)
                      flag = 1;
printf("%s", flag ? "yes": "no");
А так, конечно, смотря что вам надо.
0
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
24.11.2011, 22:48  [ТС] 4
Цитата Сообщение от Thinker Посмотреть сообщение
C
1
printf("%s", flag ? "yes": "no");
Не пойму смысла "flag" в этой строке. Нужно что-то вроде этого, мне кажеться:
C
1
printf("%s", flag==1 ? "yes": "no");
Или нет?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 22:51 5
Johnlion, данная переменная отвечает за то, имеется ли хотя бы один нулевой элемент в матрице.

Конструкция
C
1
printf("%s", flag ? "yes": "no");
более правильная, так как исключает некоторые ошибки, но в данной задаче можно и так написать
C
1
printf("%s", flag==1 ? "yes": "no");
0
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
24.11.2011, 23:04  [ТС] 6
Thinker, a оно все равно выводит несколько раз, было так: "nononono"
1
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 23:05 7
Цитата Сообщение от Johnlion Посмотреть сообщение
Thinker, a оно все равно выводит несколько раз, было так: "nononono"
Не может быть. Если вы опероторные скобки не ставили, то один раз.
0
63 / 3 / 1
Регистрация: 11.05.2011
Сообщений: 666
24.11.2011, 23:09  [ТС] 8
Цитата Сообщение от Thinker Посмотреть сообщение
Не может быть. Если вы опероторные скобки не ставили, то один раз.
Отлично, теперь работает А как так может быть, чтобы у цикла не было фигурных скобок?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 23:13 9
Цитата Сообщение от Johnlion Посмотреть сообщение
А как так может быть, чтобы у цикла не было фигурных скобок?
Очень просто. Если нет операторных скобок, то к циклу относится только следующий оператор. Если так скобки любите, то так можно тоже

C
1
2
3
4
5
6
7
8
9
10
int flag = 0;
for (i=0; i<n; i++)
{
          for (j=0; j<n; j++)
          {
                 if (a[i][j]==0)
                      flag = 1;
          }
}
printf("%s", flag ? "yes": "no");
только нет в этом смысла
0
Заблокирован
24.11.2011, 23:18 10
Цитата Сообщение от Johnlion Посмотреть сообщение
Отлично, теперь работает А как так может быть, чтобы у цикла не было фигурных скобок?
Можно упростить цикл. То есть в вашем примере, как только найден нулевой элемент, то нужно завершить цикл, так как вы уже знаете, что нулевой элемент присутствует, не так ли? Тогда это можно сдделать следующим образом

C++
1
2
3
4
5
6
7
8
9
10
11
12
int zero = 0;
int i, j;
 
for ( i = 0; !zero && i < n; i++ )
{
   for ( j = 0; !zero && j < n; j++ )
   {
       zero = a[i][j] == 0;
   }
}
 
 printf( "%s",  zero ? "yes": "no" );
Что касается вашего вопроса, то фигурные скобки нужны, если тело цикла состоит более чем из одного предложения. В вашем исходном случае телом внешнего цикла было одно предложение внутреннего цикла, поэтому фигурные скобки были не нужны. Все остальные предложения относились к телу внутреннего цикла.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
24.11.2011, 23:22 11
Если уж на то пошло, то можно еще упростить

C
1
2
3
4
5
6
7
8
9
flag = 1;
for(i = 0; i < n && flag; i++)
{
   for(j = 0; j < n && a[i][j] != 0; j++)
      ;
   flag = (j >= n);
}
 
printf("%s", flag ? "no": "yes");
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
25.11.2011, 08:34 12
Цитата Сообщение от Johnlion Посмотреть сообщение
Вот цикл с матрицей размером, к примеру, 2х2. У меня сообщение принтфа выводит 4 раза слитно. Как сделать, чтоб выводило один раз?
Ты уж определись, чего ты хочешь: или один раз для всей матрицы, или по разу для каждого.
0
25.11.2011, 08:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2011, 08:34
Помогаю со студенческими работами здесь

Создать HTML-страницу, которая при загрузке выводит несколько раз строку
Не могу додумать,как это нужно реализовать.. Создать HTML-страницу, которая при загрузке выводит...

Лишний раз выводит сообщение
Добрый вечер. Уже час бьюсь над следующей проблемой. Почему выводится сообщение: &quot;Oshibka!...

cout выводит сообщение один раз..больше не хочет....
13 и 14 строки выполняются только один раз при запуске программы. Почему? Все вроде правильно...

PHP_my_admin через раз выводит сообщение об удачном импорте БД
Выбираю целевую пустую базу данных, затем выбираю ту, которую нужно импортировать (записать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru