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

时间:2016-10-15 11:44:43

标签: c visual-studio-2015 file-read

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

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

第一部分工作正常,按预期完成所有操作,但是当我运行程序并选择“从文件读取”选项时,它只是在'else if'中打印出语句并完全无法读入文本文件。

我将文本文件保存在Visual Studio 2015目录的“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;
}

很抱歉代码的数量,我认为最好包含整个源代码。

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

1 个答案:

答案 0 :(得分: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
}