你的代码有几个问题,导致它没有正确计算代码行数,以下是主要问题和修正建议:
### **1. `char thepath, target;` 变量定义错误**
在 `findAllCodes` 和 `findAllDirs` 函数中,你定义了 `char thepath, target;`,但 `thepath` 和 `target` 应该是字符串数组,而不是单个 `char` 变量。正确的定义方式如下:char thepath[MAX], target[MAX];
### **2. `sprintf(target, "%s/%s", path, fa.name);` 可能导致缓冲区溢出**
`target` 需要足够的空间来存储路径,建议使用 `snprintf` 以避免缓冲区溢出:snprintf(target, MAX, "%s/%s", path, fa.name);
### **3. `char path = ".";` 变量定义错误**
在 `main` 函数中,你定义了 `char path = ".";`,但 `path` 应该是字符串数组:
### **4. `total` 变量未初始化**
`total` 变量应该初始化为 `0`,否则可能会有未定义行为:
### **5. `_findfirst` 和 `_findnext` 可能无法正确拼接路径**
在 `findAllCodes` 和 `findAllDirs` 中,你使用 `strcat(thepath, "/*.c")` 直接拼接路径,这可能会导致路径错误。建议使用 `snprintf`:snprintf(thepath, MAX, "%s/*.c", path);
### **6. `printf` 格式化输出错误**
在 `printf("目前你总共写了 %1d 行代码!
", total);` 这里,`%1d` 不是标准格式,应该使用 `%ld` 以匹配 `long` 类型:printf("目前你总共写了 %ld 行代码!
", total);
### **7. `_A_SUBDIR` 的判断方式**
在 `findAllDirs` 中,你使用 `fa.attrib == _A_SUBDIR` 来判断是否是目录,但 `_A_SUBDIR` 可能只是 `fa.attrib` 的一部分,正确的判断方式是:if (fa.attrib & _A_SUBDIR)
### **修正后的 `main` 函数**int main()
{
char path[MAX] = ".";
total = 0;
printf("计算中...
");
findAllCodes(path);
printf("目前你总共写了 %ld 行代码!
", total);
system("pause");
return 0;
}
### **总结**
你的代码没有报错但输出 `0` 行,主要是因为:
1. `char` 变量错误,导致路径拼接失败。
2. `total` 变量未初始化,可能导致未定义行为。
3. `printf` 格式化错误,可能导致输出异常。
修正这些问题后,你的代码应该可以正确计算 `.c` 文件的行数了!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |