2016-12-12 5 views
0
#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#define FALSE 0 
#define TRUE 1 
...................... 
int checkprime (char number) 
{ 
    int i, valid; 
    valid = TRUE; 

    for (i = 2; i <= number; i++) 
    { 
     if (number % i == 0) valid = FALSE; 
    } 
    return valid; 

} 

int main(void) 

{ 
    char inputarray[4]; 
    int c, primeanswer; 

    ........................ 
    { 
     primeanswer = checkprime(c); 

     if (primeanswer == 1) 
     { 
      printf("%d", "is a prime", inputarray); 
     } 
     else 
     { 
      printf("%d", "not prime", inputarray); 
     } 
    } 
}  

Моя проблема здесь заключается в том, чтобы заставить работать функцию checkprime. Я думаю, что я, вероятно, не инициализирую что-то, поскольку цифры, которые я получаю, кажутся мне такими, как вывод программы, неверен. Также, когда я ввожу данные для checkprime, числа мне кажутся неинициализированными значениями int. И что другие функции, похоже, не называются.Как наиболее эффективно объединить функции, включая checkprime

Что я не инициализирую? Как я могу объединить функцию checkprime более эффективно с другими? Нужно ли переключаться между значениями char/int, как это было сделано в функциях?

EDIT:

#include <stdio.h> 
#include <string.h> 
#include <math.h> 
#include <stdlib.h> 
#define FALSE 0 
#define TRUE 1 

................ 
} 
int checkprime (int number) 
{ 
int i, valid; 
valid = TRUE; 

for (i = 2; i < number; i++) 
    { 
     if (number % i == 0) valid = FALSE; 
    } 
     return valid; 

} 

int main(void) 

{ 
char inputarray[4]; 
int c, primeanswer; 
......................... 

else 
{ 
c = atoi(inputarray); 

primeanswer = checkprime(c); 

if (primeanswer == 1) 
{ 
    printf("%d", "is a prime", inputarray); 
} 
else 
{ 
    printf("%d", "not prime", inputarray); 
} 
} 
} 

ответ

1

Вы проходя c к checkprime, но вы никогда не ставили его ни к чему. В результате содержимое c не определено, и попытка его чтения приводит к неопределенному поведению.

Передайте свой массив функции atoi, чтобы преобразовать ее в целое число и назначить ее c. Вы должны также изменить тип параметра number в checkprime для int, чтобы соответствовать тому, что передается в

Это также выглядит как вы теряете в else:.

if (!checknumeric(inputarray)) 
{ 
    printf("Invalid input"); 
} 
// else goes here 
{ 
    primeanswer = checkprime(c); 
    ... 

EDIT:

Дополнительные проблемы с вашим кодом:

Вы не печатаете результаты правильно:

printf("%d", "is a prime", inputarray); 
... 
printf("%d", "not prime", inputarray); 

Есть две проблемы с этим. Во-первых, фиксированная часть строки для печати является первым параметром printf. Остальные будут заменены. Итак, первые два параметра должны быть объединены в одну строку. Во-вторых, вы используете %d для печати по адресу int, но inputarray - это массив char. Вместо этого вы должны ввести c, который является целым значением, которое вы хотите распечатать. Ответ

printf("%d is a prime", c); 
... 
printf("%d not prime", c); 
+0

Могу ли я написать синтаксис следующим образом? inputarray [4] = atoi (c); – Absolutebeginnertoc

+0

@Absolutebeginnertoc Нет, вы пытаетесь использовать 'c', не настраивая его на что-либо еще. То, что вы хотите, это 'c = atoi (inputarray);'. Не забудьте зафиксировать тип параметра 'checkprime', а также исправить условие цикла, как указано в ответе Haldean Brown. – dbush

+0

Спасибо.Я приспособил его, пока все еще появляюсь как неопределенное поведение, когда я его тестирую. Будет редактировать мой оригинальный пост с тем, что у меня есть сейчас. – Absolutebeginnertoc

1

dbush является правильным, но вы все еще собираетесь получить тот результат, который вы уже видите, потому что у вас есть ошибка в вашем checkprime метод:

int checkprime (char number) 
{ 
    int i, valid; 
    valid = TRUE; 
    for (i = 2; i <= number; i++) { 
     if (number % i == 0) valid = FALSE; 
    } 
    return valid; 
} 

Ваша проблема в том, что number % number == 0 для всех значений number, и вы даете i итерировать до number с помощью <= в вашем состоянии для петли. Изменение вашей петли на:

for (i = 2; i < number; i++) { 
     if (number % i == 0) valid = FALSE; 
    } 

Зафиксирует там логику.

Смежные вопросы