2009-12-12 43 views
0

這是錯誤的。我的代碼有什麼問題?如何統計文件中的數字位數?

#include "stdafx.h" 
#include "stdlib.h" 
#include "ctype.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

FILE* input; 
int num; 
int numCount = 0; 

    input = fopen("123.txt", "r"); 

    if (!input) 
    { 
     printf("No file \a\n"); 
     exit (101); 
    } 


    while ((fscanf(input, "%d", &num)) == 1) 
     printf("%d", num); 

    if (isdigit(input)) 
     numCount++; 


    printf("number count: %d", numCount); 

    return 0; 
} 
+1

而什麼樣的錯誤你有,編譯器錯誤或運行時錯誤遇到,或也許它沒有按照你想要的方式工作?這些可能會幫助你得到一些答案 – 2009-12-12 08:41:16

+0

errorC2664'isdigit' 不能從「FILE *」更改爲「int」 – 2009-12-12 08:47:21

+0

您需要考慮「isdigit」的作用。不要讓參數類型(int)混淆你。它檢查一個*字符*,並且如果傳遞的參數是一個數字,則返回非零值。你絕對不想在你的代碼中調用fscanf。 – 2009-12-12 16:30:55

回答

1
while ((fscanf(input, "%d", &num)) == 1) 
    printf("%d", num); 

if (isdigit(input)) 
    numCount++; 

你只檢查一次input。而你要檢查num而不是inputFILE

while ((fscanf(input, "%d", &num)) == 1){ 
    printf("%d", num); 
    if (isdigit(num)) 
     numCount++; 
} 
+0

謝謝。 但它再次出錯。 「調試斷言失敗。」 – 2009-12-12 08:50:31

+1

num由fscanf中的「%d」設置,isdigit正在查找0-9個字符的ASCII值。應該將「%d」更改爲「%c」,或者更好一些 – 2009-12-12 09:22:08

2

你的邏輯是完全錯誤的。您應該使用fgetc()讀取單個字符,然後使用isdigit()對其進行測試。當fgetc()返回EOF時,循環應該終止。

1

isdigit()測試一個字符,而不是FILE *。

如果你要算什麼東西,numCount ++應該是一個循環中,而不是一旦整個程序

相關問題