簡體   English   中英

在C中將二進制轉換為數字字符串轉換為十進制數字

[英]Converting binary to number string to decimal number in C

我編寫了一個程序,要求用戶使用字符串輸入數字,然后該程序會將該數字轉換為十進制,但是當我編譯(使用-lm)並運行a.out時,我遇到了問題。我遇到了分段錯誤(核心已轉儲),不十分確定在哪里查找或如何修復它,又一個問題是我需要什么以便打印轉換結果(printf(“ something ..”))?

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

int main()
{

char string[100];
int s;
char a;
char j;
int sum;

printf("B = B to D\n");
printf("D = D to B\n");
printf("choose which one to convert to:");
scanf("%c%c", &a, &j);

if (a == 'B')
{
    printf("enter binary number to convert to decimal: ");
    scanf("%s", string);

    for(s = strlen-1; s >= 0; s--)
    {

            if(string[s] == '1')
            {
            sum = sum + pow(2,s);

            }
    }

}

return 0;

您可能打算擁有strlen(string) - 1 ,而不是strlen - 1 我最好的猜測是您的程序將strlen解釋為函數指針,並且在那之后發生瘋狂的事情幾乎是可以肯定的。

實際上,您可能對strtol函數感興趣,該函數似乎完全可以滿足您的需求。

您將strlen用作整數。 我想你的意思是strlen(string)

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

void reverse_string(char *string)
{
   int string_length = strlen(string);
   char temp;
   int i;
   for (i = 0; i < string_length/2; i++)
   {
      temp = string[i];
      string[i] = string[string_length - (i + 1)];
      string[string_length - (i + 1)] = temp;
   }
}

int main()
{

   char string[100];
   int s;
   char a;
   char j;
   int sum = 0;
   int string_length = 0;
   int number, original_number;
   int remainder;
   char binary_string[200];
   int i = 0;

   printf("B = B to D\n");
   printf("D = D to B\n");
   printf("choose which one to convert to:");
   scanf("%c%c", &a, &j);
   a = toupper(a);
   if (a == 'B')
   {
      printf("enter binary number to convert to decimal: ");
      scanf("%s", string);

      string_length = strlen(string);
      for(s = strlen(string)-1; s >= 0; s--)
      {
         if(string[s] == '1')
         {
            sum = sum + pow(2,string_length - (s + 1));
         }
      }
      printf("%s in binary is %d\n",string,sum);
   }
   else if (a == 'D')
   {
      printf("enter positive decimal number to convert to binary: ");
      scanf("%s",string);
      number = atoi(string);
      original_number = number;
      if ( number < 0 )
      {
         printf("ERROR: only positive numbers please\n");
         return 1;
      }
      do
      {
         remainder = number % 2;
         if ( remainder == 0 )
            binary_string[i] = '0';
         else
            binary_string[i] = '1';
         number = number / 2;
         i += 1;
      }
      while (number > 0);
      binary_string[i] = '\0';
      reverse_string(binary_string);
      printf("decimal %d is %s in binary\n",original_number,binary_string);
   }
   return 0;
}
for(sum=0, j=0, s=strlen(string)-1; s >= 0; s--, ++j){
    if(string[s] == '1'){
        sum = sum + pow(2,j);
    }
}
printf("%d\n",sum);

strlen使用不正確。 我想您想做類似strlen(string)-1的事情。 順便說一句,您的邏輯將無法轉換小數部分。 檢查此代碼:

#include <stdio.h>
#define MAX 1000

int main()
{
    double fraDecimal=0.0,dFractional=0.0 ,fraFactor=0.5;
    long dIntegral = 0,bIntegral=0,bFractional[MAX];
    long intFactor=1,remainder,i=0,k=0,flag=0;
    char fraBinary[MAX];

    printf("Enter any fractional binary number: ");
    scanf("%s",&fraBinary); 
    while(fraBinary[i]) //Separating the integral and fractional parts
    {

      if(fraBinary[i] == '.')
          flag = 1; //If dot is found start taking the fractional part.
      else if(flag==0)
          bIntegral = bIntegral * 10 + (fraBinary[i] -48); 
          /* char - 48 to get the numerical value.*/
      else
          bFractional[k++] = fraBinary[i] -48;
      i++;
    }

    while(bIntegral!=0){
     remainder=bIntegral%10;
     dIntegral= dIntegral+remainder*intFactor;
     intFactor=intFactor*2;
     bIntegral=bIntegral/10;
    }

    for(i=0;i<k;i++){
     dFractional  = dFractional  + bFractional[i] * fraFactor;
     fraFactor = fraFactor / 2;
    }

    fraDecimal = dIntegral + dFractional ;

    printf("Equivalent decimal value: %Lf",fraDecimal);   
    return 0;
}

來源: 將二進制轉換為十進制數的C程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM