ошибка с оператором printf? (В С) * Обновление * - PullRequest
1 голос
/ 16 февраля 2009

Для пояснения мне нужна программа для печати чисел, которые вводятся для a и b, а не фактических букв a и b.
Хорошо, вот пересмотренная программа за предложения yall:

int main (int argc, char *argv[])  
{
   int a; /*first number input*/  
   int b; /*second number input*/  

   a = atoi(argv[1]); /*assign to a*/  
   b = atoi(argv[2]); /*assign to b*/  

   if (a < b)  
      printf("%s\n", a < b); /* a is less than b*/  
      else {  
         printf("%s\n", a >= b); /* a is greater than or equal to b*/  
      }  

   if (a == b)  
      printf("%s\n", a == b);  /* a is equal to b*/  
      else {  
         printf("%s\n", a != b); /* a is not equal to b*/  
      }  

   return 0;  
} /* end function main*/  

lol, теперь, когда я запускаю программу, мне говорят

8 [main] a 2336 _cygtls::handle_exceptions: Error while dumping state   
Segmentation fault 

Что, черт возьми, это значит? (Если вы еще не заметили, я довольно безнадежен в этом деле, смеется).

Ответы [ 6 ]

7 голосов
/ 16 февраля 2009

Вы просите printf() напечатать значения логических выражений (которые всегда принимают значение 1 или 0 для true и false соответственно).

Вы, вероятно, хотите, чтобы ваш код выглядел больше как:

if (a < b)
     printf("%s\n", "a < b"); /* a is less than b*/
else {
     printf("%s\n", "a >= b"); /* a is greater than or equal to b*/
}

Для отображения результатов в виде строк.

6 голосов
/ 16 февраля 2009

Эта строка:

if (a = b)

не должно быть

if (a == b) 

То же самое здесь:

printf("%d\n", a = b);  /* a is equal to b*/

должно быть

printf("%d\n", a == b);  /* a is equal to b*/
2 голосов
/ 16 февраля 2009

Основываясь на ваших изменениях, я думаю, вы ищете это:

#include <stdio.h>

int main (int argc, char *argv[]) {
    int a; /*first number input*/
    int b; /*second number input*/

    a = atoi(argv[1]); /*assign to a*/
    b = atoi(argv[2]); /*assign to b*/

    if (a < b)
        printf("%d < %d\n", a, b); /* a is less than b*/
    else
        printf("%d >= %d\n", a, b); /* a is greater than or equal to b*/

    if (a == b)
        printf("%d == %d\n", a, b);  /* a is equal to b*/
    else
        printf("%d != %d\n", a, b); /* a is not equal to b*/

    return 0;
}

Этот код:

wfarr@turing:~$ ./foo 1 2
1 < 2
1 != 2
1 голос
/ 16 февраля 2009
printf("%s\n", a == b);

"% s" печатает строку. a == b не строка, это логическое выражение, в результате которого 1 (true) или 0 (false).

Итак, ваш printf () пытается печатать символы, пока не найдет нулевой байт, начиная с позиции логического выражения ... desaster.

0 голосов
/ 16 февраля 2009

Полагаю, вы хотите что-то подобное ...

Ввод:

а = 5, б = 7

Выход:

5 <7 </p>

5! = 7

Если это так, вам нужно вывести целые числа a и b, а также строку между ними, чтобы показать связь.

if( a < b ) {
    printf( "%d < %d\n", a, b );
}
else {
    printf( "%d >= %d\n", a, b );
}

// follow similar pattern for the next if/else block..
0 голосов
/ 16 февраля 2009

Ваша проблема в том, что вы пытаетесь заменить логические выражения вместо целых. Все вышеперечисленное (a> b) ... оценивается как true или false (за исключением a = b, который присваивает значение b a). Если вы пытаетесь вернуть большее значение, вам следует сделать следующее:


    printf("%d\n", a > b ? a : b)

Здесь говорится, что если a больше b, выведите a, иначе b.

Edit: я думаю, что вы на самом деле ищете, чтобы распечатать слова "a> b" и т. Д. В этом случае поместите их в printf. Когда вы помещаете% d в printf, он помещает указанное целочисленное значение в это место в строке.

Полагаю, вам нужно следующее:


    if(a > b)
        printf("a > b\n");
    else
        printf("b >= a\n");

Это правильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...