为什么我不能使用 Visual Studio 读取 C 中的文本文件?

Why can't I read a text file in C using Visual Studio?

我创建了一个 C 程序,它一个一个地读入一个字符,并确定它是元音字母、数字、标点符号等。

用户可以选择通过键盘或文本文件输入字符。

第一部分工作正常,一切都按预期进行,但是当我 运行 程序和 select 'read from file' 选择时,它只是打印出 'else if' 完全无法读取文本文件。

我把文本文件保存在Visual Studio2015目录下的'Source Files'文件夹中,我的代码如下(问题所在区域接近底部):

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

FILE *pInputFile;
FILE *pOutputFile;

int answer = 0;

int chr = 0;
int numLowerCaseVowels = 0;
int numUpperCaseVowels = 0;
int numPunctuationChars = 0;
int numNumericals = 0;

int *pCharPointer;
int previousValue = 0;

int main()
{
    // ##### KEYOBARD OR FILE INPUT #####
    printf("\nKEYBOARD OR FILE INPUT?\n");
    printf("Press 'k' for keyboard, 'f' for file.\n");
    answer = _getch();

    if (answer == 'k')
    {
        printf("You selected keyboard.\n\n");
        printf("Enter a character.\n");

        // ##### KEYBOARD INPUT #####
        while ((chr = _getch()) != '\r')
        {
            pCharPointer = &chr;

            printf("%c", chr);

            // Determine if input is lower/upper case vowel.
            switch (chr)
            {
            case 'a':
            case 'e':
            case 'i':
            case 'o':
            case 'u':
                printf(" Lowercase Vowel.");
                numLowerCaseVowels++;
                break;
            case 'A':
            case 'E':
            case 'I':
            case 'O':
            case 'U':
                printf(" Uppercase Vowel.");
                numUpperCaseVowels++;
                break;
            default:
                break;
            }

            //Determine if char is punctuation.
            if (_istpunct(chr)) 
            {
                printf(" Punctuation Character.");
                numPunctuationChars++;
            }

            //Determine if char is numeric.
            if (iswdigit(chr))
            {
                printf(" Numeric Character.");
                numNumericals++;
            }

            //Determine if char is duplicate character.
            if (previousValue == chr) 
            {
                printf(" Duplicate Character.");
                previousValue = *pCharPointer;
            }
            else 
            {
                previousValue = *pCharPointer;
            }

            printf("\n");
        }
    }

    // ##### PROBLEM AREA  #####
    else if (answer == 'f')
    {
        printf("You've chosen file.\n\n");

        fopen_s(&pInputFile, "Text.txt", "r");
        chr = getc(pInputFile);

        while ((chr = getc(pInputFile)) != EOF)
        {
            printf("%c", chr);
        }

        fclose(pInputFile);
    }
    else
    {
        printf("Invalid Input. Exiting...\n");
        exit(1);
    }



    // ##### ANALYSIS #####
    printf("\nNumber of lowercase vowels: %d\n", numLowerCaseVowels);
    printf("Number of uppercase vowels: %d\n", numUpperCaseVowels);
    printf("Number of punctuation characters: %d\n", numPunctuationChars);
    printf("Number of lowercase vowels: %d\n\n", numNumericals);

    return 0;
}

抱歉代码量太大,我认为最好包括整个源代码。

它实际上还没有对文本文件中的字符执行任何分析,我只是试图进入它首先实际读取文件的阶段。 任何帮助将不胜感激。

即使找到该文件,您也会遇到的问题是您丢失了输入的第一个字符。

正确的做法:

errno_t err;

if ((err=fopen_s(&pInputFile, "Text.txt", "r"))==0)
{
       // file exists: don't read a char before the loop or
       // it will be lost

        while ((chr = getc(pInputFile)) != EOF)
        {
            printf("%c", chr);
        }

        fclose(pInputFile);
}
else
{
   fprintf(stderr,"Cannot open file, error %d\n",err);
   // handle the error further if needed
}