【发布时间】:2020-01-20 05:50:32
【问题描述】:
所以我试图打开和读取基于 stdinput 的文件。我使用 strtok 来解析输入,以便用户可以输入多个文件。我已将分隔符设置为空格。
int main(const int argc, const char *argv[]){
if (argc == 1) {
char str[100];
const char delim[2] = " ";
printf("Enter a filename:\n");
fgets(str, 100, stdin);
char *ptr = strtok(str, delim);
while (ptr != NULL){
FILE *fp = fopen(ptr, "r");
if ((fp == NULL)) {
fprintf(stderr, "failed to open %s\n", ptr);
}
else{
printf("Opening file: %s\n", ptr);
char c;
while ((c = fgetc(fp)) != EOF){
if (c != ' '){
putchar(c);
}
if (c == ' ') {
printf("\n");
}
}
fclose(fp);
}
ptr = strtok(NULL, delim);
}
return 0;
}
如果我输入“example.txt example2.txt”,它会读取example.txt,然后说打开example2.txt失败。但是,如果我输入“example.txt example2.txt”(注意多余的空格),它会正确读取它们,但最后会显示“打开失败”而没有文件名。此外,单独读取一个文件会导致“无法打开”。有什么想法吗?
【问题讨论】:
-
delim[2] = " ";->delim[] = " \r\n"; -
如果您不使用
argc或argv,建议使用int main(void)。此外,fgetc()返回一个int,而不是char— 您可能会过早检测到 EOF(如果普通char类型已签名)或根本检测不到它(如果普通char类型未签名) .使用int c;并避免问题。