gpt4 book ai didi

c - 无法在 c 中的 while 循环期间/之后清除字符串

转载 作者:行者123 更新时间:2023-11-30 15:52:36 24 4
gpt4 key购买 nike

我有一个代码可以扫描目录中的所有文件以查找目标单词,并将它们打印到一个新文件中。现在的问题是,在 while 循环读取文件并将变量存储到字符串(例如 customer)中之后,如果正在读取的下一个文件没有目标单词,它仍然显示上一个文件存储在字符串中的结果文件。我的目标是如果当前文件没有目标单词,则使其显示“N/A”。

我尝试了几种方法来清除 while 循环末尾或开头的字符串,但它们都不起作用,大多数只是给我一个核心转储错误。没有想法了,任何帮助将不胜感激!

代码(为了便于阅读而缩短):

int main(int argc, char** argv)
{
char directory[100];
char buff[100];
char delims[] = " :=";
char* result = NULL;
char* customer;
char* device;
char* buffer;
int i = 0;
DIR* FD;
struct dirent* in_file;
int c = 0;

printf("Enter directory:");
scanf("%s",directory);

FILE* ft = fopen("workorderlist.csv", "w"); /* Open file to write to*/
if (ft == NULL)
{
puts("Cannot open target file");
exit(1);
}

fprintf (ft, "Work Order,Customer,Device,Test_Prog,Software,DUT_board_id,Corl box\n");

/* Open Directory */
if (NULL == (FD = opendir(directory)))
{
puts("Cannot open directory");

return 1;
}

while ((in_file = readdir(FD)))
{
if (!strcmp (in_file->d_name, "."))
{
continue;
}

if (!strcmp (in_file->d_name, ".."))
{
continue;
}

/* Open files to read from */
buffer = (char*)malloc(100);
sprintf(buffer, "%s/%s", directory, in_file->d_name);

size_t len = strlen(buffer);
if (len >= 4 && memcmp(buffer + len - 4, ".wor", 4) == 0) /* checks if file ends with .wor */
{
FILE* fs = fopen(buffer, "r"); /* open file to read */

if (fs == NULL)
{
puts("Cannot open source file");

return 1;
}

/* Scanning each file for targeted words: */
while (fgets(buff, 100, fs) != NULL)
{
result = strtok( buff, delims );
while (result != NULL)
{
if ((strcmp(result, "Customer") == 0))
{
result = strtok(NULL,delims);
customer = (char*)malloc((strlen(result)+1)*sizeof(char));
strcpy(customer, result);
for (i = 0; i < strlen(customer) + 1; i++)
{
if (customer[i] == '\n')
{
break;
}
}

customer[i] = ' ';
}

if (strcmp(result, "device") == 0)
{
result = strtok(NULL, delims);
device = (char*)malloc((strlen(result) + 1) * sizeof(char));
strcpy(device, result);
for (i = 0; i < strlen(device) + 1; i++)
{
if(device[i] == '\n')
{
break;
}
}

device[i] = ' ';
}

result = strtok(NULL,delims);
}
}

if (customer == '\0')
{
customer = "N/A";
}

if (device == '\0')
{
device = "N/A";
}

fprintf(ft, "%s,%s,%s,%s,%s,%s,%s\n",
in_file->d_name, customer, device, testprog,
software, dutboardid, corlbox);

printf(in_file->d_name);
printf("\n");
fclose (fs) ;
c++;
}
}

printf("Total Workorders Found: %d (Info saved to workorderlist.csv)\n", c);
fclose(ft);

return 0;
}

最佳答案

首先,客户/设备是字符串。你不应该做 == 来比较。例如,您可以比较字符串的第一个字符:device[0] == '\0';您应该在循环开始之前进行字符串初始化。您可以通过使用带有已知值的 strcpy 或任何其他字符串操作函数来实现此目的。在循环之前用来初始化字符串的值是稍后用 strcmp 或类似方法测试的值。与整数或任何其他 C 数据类型类似,但您需要操作函数。

顺便说一句,您是否也在这里的问题中发布了您的读取文件循环?

希望这有帮助。

关于c - 无法在 c 中的 while 循环期间/之后清除字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14289405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com