簡體   English   中英

獲取整數的位數

[英]Getting the number of digits of an integer

  bool isValidId(int* id)
  {
        if(log10(*id) != 6)
        {
           return false;
        }

   return true;
  }


  printf("Enter ID: ");
  gets(input);
  c.id = atoi(input);
  validID= isValidId(c.id);
  if(!validID)
  {
     printf("Invalid ID format -(Use example 123456 format). \n");
  }

這就是它現在的樣子。我要求用戶輸入一個ID並檢查它是否與isValidId方法有效,但是當我輸入ID時我的程序崩潰了。 請幫忙! 謝謝

return *id >= 100000 && *id < 1000000;

我認為這可能是一個很好的解決方案,既易於閱讀又高效。

如果您只是想判斷它是否是有效的id,則無需獲取其長度

程序崩潰是因為isValidId的參數是指向int的指針,而不是int,所以

validID = isValidId(c.id);

應該

validID = isValidId(&c.id);

首先,我沒有看到任何理由將指針傳遞給isValidId函數。 您可以傳遞一個整數並計算位數。

bool isValidId(int id) {
    // count digits here
}

現在至少有兩種計算位數的方法。 第一個是使用log10 10個基數的整數n中的位數是(int)(log10(n) + 1) 您需要導入math.h才能使用log10 在調用log10之前,您可以檢查n <= 0

第二種方式是循環通過n

int count = 0;

while (n > 0) {
    count++;
    n /= 10;
}
  1. 你已經聲明isValidId獲取一個指向int的指針,但你傳遞的是一個普通的int ; 在這種情況下,沒有理由使用指針,因此最好更改isValidId以使用常規int

  2. 永遠永遠永遠永遠永遠使用gets - 引入故障/嚴重的安全漏洞點在你的代碼 請改用fgets(input, sizeof input, stdin)

  3. 如何聲明input 它是否足夠大以容納int允許的數字,加上一個符號,加上一個0終結符?

  4. log10返回一個double ,而不是int 要使用log10正確計算數字,您需要編寫類似(int)floor(log10(id)) + 1

您可以稍微簡化一下isValidId函數:

bool isValidId(int id)
{
  return (int) floor(log10(id)) + 1 == 6;
}

布爾數據類型是C語言的后來者(在C99中引入),因此我們很多舊類型傾向於避免在代碼中使用布爾常量。

我沒有做過C,但嘗試這樣的事情

bool isValidId(int* id)
{
    char str[15];
    sprintf(str, "%d", id)
    if(strlen(str) != 6)
    {
        return false;
    }

    return true;
}

它更容易這樣:

#include <math.h>
bool isValidId(int *id)
{
    return (int)log10(*id) == 6;
}

暫無
暫無

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

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