为什么我不能使用 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
}
我创建了一个 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
}