#c #capitalization #visual-studio-2022 #data-files
#c #капитализация #visual-studio-2022 #файлы данных
Вопрос:
Итак, на данный момент я пытаюсь создать программу, которая печатает существующие данные текстового файла и копирует эти данные во всех заглавных буквах. Я могу открыть исходный текстовый файл и могу скопировать его в обычном смысле без заглавных букв; однако, когда я пытаюсь заставить программу написать исходное сообщение с заглавной буквы, она просто…не хочет этого делать. Он либо может работать, но вообще не печатает текст, либо просто ограничивает меня в этом. Есть ли что-то, чего мне не хватает, чтобы я мог исправить этот код, чтобы он функционировал должным образом?
#define _CRT_SECURE_NO_WARNINGS #include lt;stdio.hgt; #include lt;stdlib.hgt; /* Required for Exit */ #include lt;ctype.hgt; /* Required for the character function library */ int main() { /* Limitations in characters */ FILE* inFile; FILE* outFile; char line[100]; char lineTwo; char fileCreate[100], charman; /* Variables for Function */ printf("Hello there user!n "); /* Introductory to the User */ printf("This program is set to print out the contents of a very specific file in caps.n"); printf("Afterwards you will be prompted for a name to the output file.n"); inFile = fopen("C:\privacyisvalued\insertname.txt", "r"); /* Read the file's contents */ /* Keep in mind, file location may differ */ if (inFile == NULL) /* Test for Errors */ { printf("nFile unavailable."); printf("nThe program will now exit."); exit(1); } while (fgets(line, 100, inFile) != NULL) /* Read the file */ { printf("n%s", line); } printf("nPlease write the name of the file that you'd like to create in text format: "); scanf("%s", fileCreate); /* User Input */ outFile = fopen(fileCreate, "w"); if (outFile == NULL) { printf("nFile unavailable."); printf("nThe program will now exit."); exit(1); } while((lineTwo = fgetc(inFile)) != EOF) { line = toupper(line); fputs(line, outFile); } return 0; }
Комментарии:
1. Вы открыли файл и получили из него все содержимое. Вам, пожирателю, придется закрыть и открыть его снова или вернуть курсор в начало файла, чтобы снова прочитать его.
2. Обратите внимание, что это не так, как
toupper
используется. Включите предупреждения компилятора или прочитайте их.line
представляет собой массив из 100 символов. Функцияtoupper
работает с одним символом (и возвращает его). Возможно, вы имели в видуfputc(toupper(lineTwo), outFile);
3. Ну, и куда мне следует поместить подобную функцию? Должно ли это входить в оператор if или должно выходить за его пределы?
4. Первый комментарий касается того факта, что вы открыли файл, а затем прочитали из него данные. Поэтому, если вы продолжите чтение данных, оно начнется с того места, на котором остановилось предыдущее чтение. Если у вас нет причин для этого первоначального
fgets
вызова (например, если вам не нужно читать и отображать исходное содержимое), вы можете просто удалить его. В противном случае, как было предложено, вам следует вернуться к началу файла перед повторным чтением:fseek(inFile, 0, SEEK_SET);
5. В качестве альтернативы, если вы просто хотите прописать и вывести содержимое
line
, которое было прочитано ранее, сделайте это вместо этого:for (const char* s = line; *s; s) fputc(toupper(*s), outFile);
— нет необходимости вводить этот цикл ввода файла, если только вы не намерены выводить только данные, которые появляются после верхней строки этого файла.