Member 13970315 Ответов: 2

Как мне отладить свой код( на языке Си) и понять ошибки и предупреждения, которые я получаю?


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

вот мой код на языке Си:

( у меня есть #include<stdio.h> В начале, а также int main (), это две задачи, с которыми у меня возникли проблемы, остальные в порядке)

(assignement1:
Цитата:
Напишите функцию C, которая определяет, имеет ли число заданный простой множитель. Например, если функция вызывается со значением 10 в качестве числа и 5 в качестве primeFactor, функция должна возвращать 1, указывая, что 5 является простым множителем 10. Аналогично, функция должна возвращать 0, если число в Примере равно 9.
Функция C должна иметь следующую сигнатуру:

int myPrimeFactor(int number, int primeFactor);)



}

int myPrimeFactor(int number, int myprimeFactor){


    printf("Enter one integer and one primeFactor\n:  ");
    scanf("%d%d", &number,&myprimeFactor);

  if (number%myprimeFactor==0)
  	printf("This is a prime factor of number ");
  else if (myprimeFactor%number==0)
  	printf("This is a prime factor of number");
  else
  	printf("This is not a prime factor of number");

    return 0;

  }



(Задание 2:
Цитата:
Цитата:
Напишите функцию C, которая выводит числа в заданном диапазоне, а также указывает, является ли число нечетным или четным и является ли 5 простым фактором в числах. Вы должны использовать функцию myPrimeFactor, чтобы определить, является ли 5 простым множителем числа. Функция должна напечатать что-то вроде:
1 нечетно и 5 не является простым фактором

2 является четным и 5 не является простым фактором)


void myNumbers(int startnum, int endnum){

for (startnum=1;endnum<=50;startnum++)
{
  if(startnum%2 == 0 %% startnum%5==0);
      printf("%d is even and 5 is a primeFactor", startnum);

if(startnum%2==0 %% startnum%5!==0);
    printf("%d is even and 5 is not a primeFactor", startnum);

  else if(startnum%2!==0 %% startnum%5==0);
      printf("%d is not even and 5 is a primeFactor", startnum);

  else
    printf("%d is not even and 5 is not a PrimeFactor", startnum);

  }

}



кроме того, это ошибки, которые я получаю
8 errors generated.

startriangle_edit.c:67:23: error: expected expression
  if(startnum%2 == 0 %% startnum%5==0);
                      ^
startriangle_edit.c:70:19: error: expected expression
if(startnum%2==0 %% startnum%5!==0);
                  ^
startriangle_edit.c:70:33: error: expected expression
if(startnum%2==0 %% startnum%5!==0);
                                ^
startriangle_edit.c:73:3: error: expected expression
  else if(startnum%2!==0 %% startnum%5==0);
  ^
startriangle_edit.c:76:3: error: expected expression
  else
  ^
startriangle_edit.c:98:15: error: expected expression
    myNumbers(int startnum, int endnum);
              ^
startriangle_edit.c:98:29: error: expected expression
    myNumbers(int startnum, int endnum);
                            ^


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

Я попытался изменить фигурные скобки ({}) и;, чтобы посмотреть, помогло ли это. Кроме того, я не был уверен, что некоторые части кода были правильными, особенно когда писать startnum/endnum, и правильно ли было использовать %% как и.

2 Ответов

Рейтинг:
2

OriginalGriff

Отладчик не поможет вам, пока вы не получите чистую компиляцию - и на вашем уровне вы должны избавиться от всех ошибок компиляции и предупреждений. Вы не можете отлаживать код, пока он не компилируется, так как при наличии одной ошибки компилятора EXE-файл не создается.

Поэтому начните с пристального изучения ваших сообщений об ошибках:

startriangle_edit.c:67:23: warning: implicit declaration of function 'and' is
      invalid in C99 [-Wimplicit-function-declaration]
  if(startnum%2 == 0) and (startnum%5==0);
Он жалуется на то, что вы используете слово "и"в этой строке кода, и правильно, потому что "логическое и" в C-это "&&", nort "и". Изменить так, чтобы линия этого:
if(startnum%2 == 0) && (startnum%5==0);
Это вызовет еще одну ошибку, потому что вам нужны скобки вокруг всего условия:
if (a)
   {
   ...
   }
Так что добавьте их тоже:
if( (startnum % 2 == 0) && (startnum % 5 == 0));
Не вы становитесь ближе.
Но... точка с запятой в конце условия означает, что; это конец оператора, так что Вы тоже этого не хотите:
if( (startnum % 2 == 0) && (startnum % 5 == 0))

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

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


Рейтинг:
0

KarstenK

Ошибка в том, что вы используете ложный токен. Вам нужно использовать "&&" и после того, как вы должны/можете выполнить какой-то код. Иногда компиляторы не понимают код и показывают ошибку на более позднем этапе. Почитайте немного учебные пособия за дополнительной информацией.

 if(startnum%2 == 0 && startnum%5==0) {
//do something
}
Мне нравится использовать дополнительные фигурные скобки для ясности
 if((startnum%2 == 0) && (startnum%5==0) ) {
//do something
} else {
//do something if NOT true
}