Tarun Jha Ответов: 4

Имея проблемы с циклом for В C, он не печатает выходные данные ?


Написать программу на языке Си, чтобы найти наибольшее из n чисел.
Вывод не показывает инструкцию print. И имея путаницу в том, где использовать оператор break.

Что я уже пробовал:

#include <conio.h>
#include <stdio.h>

int main(){
	
	int total[100];
	int count = 0, i=0;
	int num, j, k;
	
	printf("Enter the number: \t");
	scanf(" %d", &num);
	
	
	while(num!=0){
	
		total[i] = num%10;
		
		count++; // for every number it increments i.e. it is the length of the num entered.
		
		num /= 10 ;
		i++;
	}

	
/*	printf(" %d \n", count);
	
	for(j=0;j<=count-1; j++){
		
		printf(" %d", total[j]);
	}
*/	
	
	for(j=1; j<=count; j++){
		
		for(k=1; k<=count; k++){
			
			if(total[j] > total[k]){	/*for total[j] it will check if it is greater then all the
										others	or not */
										
				printf(" %d is the greatest number", total[j]);
				
				//break;
			}
			
			//break;
		}
	}
	
	getch();
	return 0;
}

4 Ответов

Рейтинг:
4

Patrice T

Цитата:
Имея проблемы с циклом for В C, он не печатает выходные данные ?

Когда вы не понимаете, почему ваш код терпит неудачу, пришло время использовать отладчик.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
36

OriginalGriff

Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании письма: успешная компиляция означает, что вы написали письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но к более ранним стадиям вы придете позже): тестирование и отладка.

Начните с рассмотрения того, что он делает и чем это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а он удваивает его и печатает ответ, то если ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его-он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он где-то здесь:
int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить почему. Поставить точку останова на строке:
for(j=1; j<=count; j++){

и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "шаг вперед" для выполнения каждой строки по очереди. Используйте отладчик, чтобы посмотреть, какие значения содержат переменные. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он совершенствуется только при использовании!


Рейтинг:
23

Jochen Arndt

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

// Assume first number is max for now
int max = total[0];
for (j = 1; j < count; j++)
{
    if (total[j] > max)
        max = total[j];
}
printf(" %d is the greatest number\n", max);
Или если вам нужен индекс для максимального числа:
int max_index = 0;
for (j = 1; j < count; j++)
{
    if (total[j] > total[max_index])
        max_index = j;
}
printf(" %d is the greatest number\n", total[max_index]);


CPallini

Кроме того, цикл for должен установить j начальное значение до 0.

Jochen Arndt

Я инициализировал max / max_index (см. Также комментарий к первому фрагменту кода), чтобы проверка могла начинаться с j = 1.

Или вы ссылаетесь на исходный код?

CPallini

О, не обращай внимания. Моя вина.

Tarun Jha

оригинальный код, пожалуйста. это будет легче понять

Рейтинг:
12

CPallini

Похоже, вы пытаетесь найти величайшее цифра входного номера. Для такой задачи вам не нужен ни массив, ни циклы for: просто извлеките его на лету:

#include <stdio.h>

int main()
{
  int num;
  int greatest_digit = 0;

  printf("Enter the number: \t");
  scanf(" %d", &num);

  while( num != 0 )
  {
    int digit = num % 10;
    if (greatest_digit < digit) greatest_digit = digit;
    num /= 10 ;
  }

  printf("the greatest digit is %d\n", greatest_digit);

  getchar();

  return 0;
}