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

注意すべき問題の 1 つは、インデントが原因でコンパイラとの間で誤解が生じることです。

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 に答える