[英]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;
}
你已經聲明isValidId
獲取一個指向int
的指針,但你傳遞的是一個普通的int
; 在這種情況下,沒有理由使用指針,因此最好更改isValidId
以使用常規int
。
永遠永遠永遠永遠永遠使用gets - 將引入故障/嚴重的安全漏洞點在你的代碼 。 請改用fgets(input, sizeof input, stdin)
。
如何聲明input
? 它是否足夠大以容納int
允許的數字,加上一個符號,加上一個0終結符?
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.