0

我在使用这段代码时遇到了一些问题(见下文)。无论我输入什么文件名,我都会得到这个乱码“ \330\370\277_\377 ”。谁能告诉我我做错了什么?任何帮助将不胜感激。

非常感谢!

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdint.h>

int main()
{
    char line[81], filename[21];
    int i;
    FILE *inFile;
    printf("\nPlease enter the name of a file: ");
    gets(filename);
    inFile = fopen(filename, "r");
    if(inFile == NULL)
    {
        printf("\nThe file %s was not successfully opened.", filename);
        printf("\nPlease check that the specified file exists.");
        getchar();
        exit(1);
    }
    while (fgets(line, 81, inFile) != NULL) 
printf("\n%s\n", line);

for (i = 0; line[i]; ++i) {
    line[i] = toupper(line[i]);

}
    printf("\nPrinted in UPPER case: \n\n");
    rewind(inFile);
    printf("\n%s", line);
    getchar();
}
4

2 回答 2

3
scanf("filename");

没有做你希望的事。查看其他 scanf 调用和文档以获取线索。这是一个想法:

fgets(filename, sizeof(filename), stdin);

for (i = strlen(filename); i>0; --i)
{
    switch(filename[i-1])
    {
        case '\n':
        case '\r': filename[i-1] = '\0';
                   continue;
    }
    break;
}
于 2013-06-15T23:14:42.887 回答
0

需要注意的一个问题是缩进会导致您和编译器之间的沟通不畅。

while (fgets(line, 81, inFile) != NULL)
    printf("\n%s\n", line);
for(i = 0; line[i]; ++i)
{
    line[i] = toupper(line[i]);
}

这就是为什么我建议总是使用大括号:

while (fgets(line, 81, inFile) != NULL) {
    printf("\n%s\n", line);

    for (i = 0; line[i]; ++i) {
        line[i] = toupper(line[i]);
    }
}
于 2013-06-15T23:15:42.163 回答