簡體   English   中英

使用 sscanf 在 c 中將 char 轉換為 int

[英]converting char to int in c with sscanf

我正在學習 c 和 sscanf 讓我發瘋。 我的程序將 oktal 數轉換為十進制數:

void OktalToDecimal(char str[]) {
  char character;
  int digit;
  int result = 0;

  int i;
  for (i = 0; i<strlen(str); i++){
      character = str[strlen(str) - 1 - i]; //from right to left
      printf("%c", character);
      sscanf(character, "%i", digit); //converting char to int

      //result += digit * pow(8,i);
  }

  //printf("decimal: %d \n", result);
}

int main () {
  char oktal[256] = { "361 oktal" };

  char digit[20];
  char format[20];
  sscanf (oktal, "%s %s", digit, format);

  if (strcmp (format, "oktal") == 0) {
    OktalToDecimal(digit);
  }

  return 0;
} 

我的程序出現錯誤

sscanf(character, "%i", digit); //converting char to int

我不知道為什么。 有什么幫助嗎? 謝謝

我的程序出現錯誤

sscanf(character, "%i", digit); //converting char to int

sscanf(character, "%i", digit); //converting char to int

字符是一個字符,因此不是由sscanf所需的 null 字符終止的字符串

要將數字字符轉換為相應的值,只需從他身上刪除 '0'

digit = character - '0';

但是當你確定它是一個數字時這樣做,你可以使用 function isdigit ,在你的情況下你也可以檢查你有八進制,所以檢查字符在'0'和'7'之間

除此之外,我鼓勵您檢查sscanf (oktal, "%s %s", digit, format)返回 2 以確保用戶輸入您期望的兩個字符串


從你的言論

我有義務使用 sscanf

在這種情況下,您可以將字符聲明修改為:

char character[2];

在循環之前添加終止 null 字符以完成字符串:

character[1] = 0;

並在循環中替換

 character = str[strlen(str) - 1 - i]; //from right to left printf("%c", character); sscanf(character, "%i", digit); //converting char to int

經過

  character[0] = str[strlen(str) - 1 - i]; //from right to left
  printf("%c", character[0]);
  sscanf(character, "%i", &digit); //converting char to int

因為strlen(str)在循環中永遠不會改變,我鼓勵你將它的值保存在一個變量中並在循環中使用它。 請注意,您也可以讓istrlen(str) - 1開始以簡化:

 for (i = strlen(str) - 1; i >= 0; i--){ //from right to left character[0] = str[i]; ...

暫無
暫無

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

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