C : сбой при попытке записи в файл

#c

#c

Вопрос:

Я новичок в C . Цель программы — предоставить пользователю возможность открыть файл, записать в него, затем прочитать файл, в который только что была записана запись, и отобразить обратно то, что сейчас находится в файле. Когда он примет пользовательский ввод, но после нажатия enter произойдет сбой. Я думаю, что это сбой, когда он пытается прочитать файл?

 #include <stdio.h>
#define SIZE 80
#include <iostream>
int main(void)
{
    FILE * pFile;
    int c; // variable to hold character input by user
    char sentence[SIZE]; // create char array
    char filename[SIZE]; //create filename array
    char filesentence[SIZE];
    int i = 0; // initialize counter i
    int number;
    std::cout << "Give a number. 1 for file. Anything else for standard.";
    std::cin >> number;
    getchar();
    
    if(number==1)
    {
    
        puts("Enter filename to append: ");
        while ((i < SIZE-1) amp;amp; (c = getchar()) != 'n') {
        filename[i  ] = c;}
    
        filename[i]= '';
    
        //fgetc(sentence,80,stdin);
        pFile=fopen(filename,"w ");
    
        puts("Give a sentence to place in file:");
        while ((i < SIZE-1) amp;amp; (c = getchar()) != 'n') {
        sentence[i  ] = c;}
    
        sentence[i]= '';
    
        fputs(sentence,pFile);
    
        i=0;
        do {
          c = fgetc (pFile);
          filesentence[i  ] = c;
          printf(filesentence);   
        } while (c != EOF);

        fclose (pFile);
    }
    else
    {
    
        // prompt user to enter line of text
        puts("Enter a line of text:");
    
        // use getchar to read each character
        while ((i < SIZE-1) amp;amp; (c = getchar()) != 'n') {
        sentence[i  ] = c;}
    
        sentence[i]= '';
    
        // terminate string
        // use puts to display sentence
    
        puts("nThe line entered was:");
        puts(sentence);
    }
}
  

Комментарии:

1. Почему вы так думаете? Разве ваш отладчик не показал, где именно произошел сбой и почему? И даже показывать сообщение об ошибке? Кроме того, такое сочетание функций C и C довольно беспорядочно. Почему бы на самом деле не написать C ?

2. Не уверен. Просто прочитав его во время работы, я могу указать имя файла, а затем текст для записи в файл … но затем после этого происходит сбой, когда он пытается прочитать файл обратно и вывести его

3. если вы собираетесь писать на c , используйте string вместо char . кроме того, я предлагаю вам использовать символьные константы вместо макросов для SIZE . Пример: const int size = 80 . вы также должны использовать using namespace std; , чтобы вам не приходилось продолжать писать std::

4. Что касается рекомендации FluorescentGreen5 использовать «using namespace std;», я не советую этого делать. STD большой, и это может привести к конфликту имен. Используйте что-то вроде «using std::cout;» для всего, что вы фактически используете вне пространства имен, позволяет опустить пространство имен, давая понять, откуда оно взялось. Что касается вашей реальной проблемы, послушайте Сами Кухмонена и прочитайте учебник по отладчикам. Какую среду IDE вы используете? Если вы не знаете об отладчиках, пробовали ли вы системные сообщения по всей программе, чтобы изолировать ошибку?

5. @FluorescentGreen5 Это довольно распространенное явление. Например, в eclipse это делает стандартная программа Hello World. И это не ТАКАЯ УЖ плохая практика. Для других библиотек вы можете просто полностью включить пространство имен, особенно когда они довольно узкие и сосредоточены на чем-то, исключая возможность столкновений и позволяя легко догадаться, откуда берется материал.