函数在c中的if语句中不起作用

时间:2017-01-18 21:34:14

标签: c function

我想写Base转换。 并且我要求使用if - else用户的第一个基地和最后一个基地。 功能herhangibirinedonusum在主要方法中起作用。 但是这个函数在if语句中不起作用,你能帮助我吗?

我编辑了我的代码。问题是函数在if-else语句中不起作用。 感谢。

#include <stdio.h>
#include <math.h>
#include <string.h>

int herhangibirinedonusum(long int girilen_sayi, int ilk_taban, int son_taban) 
{
    char taban_rakamlari[16] ={'0', '1', '2', '3', '4', '5', '6', '7',
                               '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    int son_donusum[64];

    long int donusturulen;
    donusturulen = 0;

    int index;
    index = 0;

    int i;

    while (girilen_sayi != 0) {
        donusturulen += (girilen_sayi % 10) * (int) pow(ilk_taban, i);
        girilen_sayi /= 10;
        i++;
    }

    while (donusturulen != 0) {
        son_donusum[index] = donusturulen % son_taban;
        donusturulen = donusturulen / son_taban;
        ++index;
    }

    --index; 
    printf("\n\nDonusturulmus sayi = ");
    for (; index >= 0; index--){
        printf("%c", taban_rakamlari[son_donusum[index]]);
    }
    printf("\n");
}

int main() 
{
    int a, b, c, d, e;
    long int sayi;
    herhangibirinedonusum(110010, 2, 10);

    printf("\nGirilecek sayı tabanını seçiniz:");
    printf("\n1: 2'lik taban");
    scanf("%i", &a);

    if (a == 1) {
        printf("\nLütfen dönüştürülecek tabanı seçiniz:");
        printf("\n1: 8'lik tabana çevir");
        scanf("%i", &b);

        printf("Lütfen sayıyı giriniz:");
        scanf("%ld", &sayi);

        if (b == 1) {
            herhangibirinedonusum(sayi, 2, 8);
        }
        else
        {
            printf("\nwrong choose");
        }
    }

}

解决方案:数组和所有变量必须在开头时是空闲的。

int herhangibirinedonusum(long int girilen_sayi, int ilk_taban, int son_taban) {
    char taban_rakamlari[16] ={'0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

    int son_donusum[64];
    int z;
    for (z = 0; z < 64; z++) {
        son_donusum[z] = 0;
    }

    long int donusturulen = 0;
    int index = 0;
    int i = 0;

    //sayi ilk olarak onluk tabana cevrilir.
    while (girilen_sayi != 0) {
        donusturulen += (girilen_sayi % 10) * (int) pow(ilk_taban, i);
        girilen_sayi /= 10;
        i++;
    }

    /* onluk tabandan istenilen tabana donusum yapilan kisim */
    while (donusturulen != 0) {
        son_donusum[index] = donusturulen % son_taban;
        donusturulen = donusturulen / son_taban;
        ++index;
    }

    // onluk tabandan herhangi bir tabana gecis yaparken kalanlardan once bolum
    // sonrasinda da kalanlar sagdan sola dogru yazilir.
    // Bu kisimda da ayni islemi yapiyoruz. Diziye tersten baslayarak
    // yazdiriyoruz.
    --index; /* diziyi tersten yazdirmak icin index sayisini azaltarak */
    printf("\n\nDonusturulmus sayi = ");
    for (; index >= 0; index--) /* diziyi tersten okuyarak yazdirilan kisim */ {
        printf("%c", taban_rakamlari[son_donusum[index]]);
    }
    printf("\n");

    return 1;

}

1 个答案:

答案 0 :(得分:0)

你没有说过从函数herhangibirinedonusum返回任何值,添加return SOMETHING(用变量替换SOMETHING),这样在int main()中它将知道if语句后面的值是什么哪些没有(否则:停止int main()中的循环)。此外,如果您尝试启动循环:

if (b == 1) {
        herhangibirinedonusum(sayi, 2, 8);
    } "

确保有一个while循环:

while(i=1){
   herhangibirinedonusum(sayi, 2, 8)
   if("herhangibirinedonusum==VALUE){ /*REPLACE WITH NEEDED VALUE*/
      continue;
      /*(or do something else)*/
   }
   else{
      break;
      /*(or do something else)*/
   }
}

此外,当您将donusturulen声明为long int时,没有必要说:

long int donustrululen;
donustrululen = 0;

您应该使用过: long int donustrululen = 0因为在你声明它之后没有必要说变量等于0(对于索引变量是相同的)因为它使代码更长(这不是你应该做的 - 尝试使代码尽可能短可能,但仍然保持工作),也没有命名长的功能。