나는 문자 하나 하나를 읽고 그 문자가 모음, 숫자, 구두점 등인지를 결정하는 C 프로그램을 만들었습니다.Visual Studio를 사용하여 C로 텍스트 파일을 읽을 수없는 이유는 무엇입니까?
사용자는 키보드 또는 텍스트 파일을 통해 문자를 입력하도록 선택할 수 있습니다 .
첫 번째 부분은 정상적으로 작동하고 예상대로 작동하지만 프로그램을 실행하고 '파일에서 읽기'를 선택하면 'else if'문을 인쇄하고 텍스트 파일.
내가 비주얼 스튜디오 2015 디렉토리에있는 '소스 파일'폴더에 저장된 텍스트 파일을 가지고, 다음과 같이 내 코드는 (문제의 문제 영역은 바닥에 가까운) :
#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;
}
코드의 양은 유감 스럽지만 전체 소스 코드를 포함하는 것이 가장 좋을 것이라고 생각했습니다.
아직 실제로 텍스트 파일의 문자에 대한 분석을 수행하지는 않지만 실제로 파일을 실제로 읽는 단계까지 도달하려고합니다. 도움이 될 것입니다.
체크 - 그렇다면, 그리고 하나. – usr2564301
1.'fopen_s()'의 리턴 코드를 확인하십시오. *는 *가 0이거나 그렇지 않으면 에러가있었습니다. 2. 파일 이름과 파일 이름을 실행 파일과 동일한 디렉토리에서 확인하십시오. 재미를 위해서'fopen_s'을'fopen'으로 대체하십시오. 4. 실제로 루프 앞에서'chr = getc (pInputFile)'호출을 먼저 수행함으로써 첫 번째 cahracter를 건너 뜁니다. –
@MaximilianGerhardt "실행 파일과 동일한 디렉토리에서 파일 이름과 파일을 확인하십시오.": 실행 파일 디렉토리에서 코드를 실행하는 경우입니다. 필수 사항은 아닙니다. –