我想写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;
}
答案 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(对于索引变量是相同的)因为它使代码更长(这不是你应该做的 - 尝试使代码尽可能短可能,但仍然保持工作),也没有命名长的功能。