gpt4 book ai didi

c - 为什么我无法使用 Visual Studio 读取 C 语言的文本文件?

转载 作者:行者123 更新时间:2023-11-30 16:56:07 25 4
gpt4 key购买 nike

我创建了一个 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;
}

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

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

最佳答案

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

正确的做法:

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 - 为什么我无法使用 Visual Studio 读取 C 语言的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40058609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com