Как исправить "назначение делает целое число без приведения" ** Обновление ** - PullRequest
2 голосов
/ 07 февраля 2009

Хорошо, вот программа, которую я набрал (также включен stdio.h):

/* function main begins program execution */
int main (int argc, char *argv[])
{
    int x; /*first number input*/
    int y; /*second number input*/
    int sum; /* variable in which sum will be stored */
    int product; /* variable in which product will be stored */
    int quotient; /* variable in which x divided by y will be stored */
    int md; /* variable in which the modulo division of x divided by y */

    x = argv[2]; /*assign total to x*/
    y = argv[3]; /*assign total to y*/

    if (argc ==3) {
       sum = x + y; /* assign total to sum */
       printf("%d\n",sum); /*print sum*/

       product = x * y; /*assign total to product*/
       printf("%d\n", product); /*print product*/

       quotient = x / y; /*assign total to quotient*/
       printf("%d\n", quotient); /*print quotient*/

       md = x % y; /*assign total to md*/
       printf("%d\n", md); /*print md*/
    } /*end if*/

    if (argc !=3) {
       printf("need two integers\n"); /*need two integers*/
    }

    return 0; /*indicate program ran successfully*/
} /*end of main*/

Когда я запускаю его через компилятор, он говорит, что в строках 15 и 16 (x = и y = строки) «присваивание делает целое число из указателя без преобразования» Как мне это исправить?

** Я изменил его на x = atoi (argv [2]) и y = atoi (argv [3]), и это исправило эту проблему. Но как всегда что-то еще сейчас облажалось. Теперь, когда я запускаю программу, я получаю:

163 [main] a_4312 _cygtls :: handle_exceptions: Ошибка при выводе состояния

Ошибка сегментации

Я прочитал, что это означает, что я не выделил память для вывода или что-то в этом роде ... кто-нибудь может мне здесь помочь? **

Ответы [ 5 ]

4 голосов
/ 07 февраля 2009

Полученные вами числа - это argv [1] и argv [2], а не argv [2] и argv [3].

2 голосов
/ 07 февраля 2009

Ошибка компилятора произошла из-за того, что вы присвоили тексту номер. На самом деле вам нужно вызвать функцию для преобразования между 2 Atoi.

Наиболее важной ошибкой во время выполнения является ошибка сегмента, это вызвано использованием неверных индексов в массиве, c имеет массивы на основе 0, поэтому первый элемент равен 0, это означает, что вам нужны 2 аргумента: 1 и 2 (так как первый аргумент - имя исполняемого файла).

Наконец, вы можете проверить значение y перед делением и модом, поскольку, если оно равно 0, вы получите проблемы деления на ноль.

x = atoi(argv[1]); /*assign total to x*/
y = atoi(argv[2]); /*assign total to y*/
2 голосов
/ 07 февраля 2009

Помимо предоставленного решения, вы также должны проверить, есть ли требуемые аргументы (переместите последний блок if до присвоения x и y), прежде чем пытаться передать их в atoi, иначе вы получите run- вопросы времени.

1 голос
/ 07 февраля 2009

Если ваша командная строка:

подсказка >> myprogram 5 6

argv [0] должно быть именем программы (myprogram) argv [1] должен быть первым параметром ("5") argv [2] должен быть вторым параметром ("6")

Я думаю, что вы имеете в виду argv [3], которого не существует.

1 голос
/ 07 февраля 2009

argv[2] дает вам char *. Вам нужно преобразовать в int:

x = atoi(argv[2]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...