Чтение строки по символу до конца строки C / C++ [дубликат]

этот вопрос уже есть ответ здесь:

Как прочитать строку один символ в то время, и остановиться, когда вы достигнете конца строки? Я использую функцию fgetc для чтения из файла и помещаю символы в массив (последний изменит массив на malloc), но не может понять, как остановиться, когда достигнут конец строки

пробовал это (C-переменная с char из файла):

if(c=="")

но это дает ошибку, что я не могу сравнить указатель на integer

файл выглядит так (длина слов неизвестна):

one
two
three

вот вопросы: 1) могу ли я сравнить c с , поскольку -это два символа (и 0) или он считается одним (тот же вопрос с n) 2) может быть, я должен использовать n ? 3) Если предложения выше неправильны, что бы вы предложили (обратите внимание, что я должен прочитать строку один символ в то время)

(обратите внимание, что я довольно новичок в C++(и программирую его самостоятельно))

4 ответов


вы хотите использовать одинарные кавычки:

if(c=='')

двойные кавычки ( " ) предназначены для строк, которые являются последовательностями символов. Одинарные кавычки ( ' ) предназначены для отдельных символов.

однако конец строки представлен символом новой строки, который является '\n'.

обратите внимание, что в обоих случаях обратная косая черта не является частью символа, а просто способом представления специальных символов. Используя обратные косые черты, вы можете представлять различные непечатаемые символы, а также символы, которые в противном случае смутили бы компилятор.


ответ на ваш первоначальный вопрос

Как прочитать строку один символ в то время, и остановиться, когда вы достигнете конца строки?

в C++ очень просто, а именно: use getline. Ссылка показывает простой пример:

#include <iostream>
#include <string>
int main () {
  std::string name;
  std::cout << "Please, enter your full name: ";
  std::getline (std::cin,name);
  std::cout << "Hello, " << name << "!\n";
  return 0;
}

вы действительно хотите сделать это в C? Я бы не стал! Дело в том, что в C, вы должны выделить память для размещения символов вы читали? Сколько персонажей? Вы не знаете впереди времени. Если вы выделяете слишком мало символов, вам придется каждый раз выделять новый буфер, чтобы понять, что Вы читаете больше символов, чем вы освободили место. Если вы чрезмерно распределяете, вы теряете место.

C-язык для низкоуровневого программирования. Если вы новичок в программировании и написании простых приложений для чтения файлов по строкам, просто используйте C++. Он делает все это распределение памяти для вас.

ваши более поздние вопросы относительно "" и строки в общие ответы были даны другими и применяются как к C, так и к c++. Но если вы используете C, пожалуйста, помните, что имеет значение не только конец строки, но и распределение памяти. И вы должны быть осторожны, чтобы не переполнения буфера.


если вы используете функцию C fgetc затем вы должны проверить следующий символ, равен ли он символу новой строки или EOF. Например

unsigned int count = 0;
while ( 1 )
{
   int c = fgetc( FileStream );

   if ( c == EOF || c == '\n' )
   {
      printF( "The length of the line is %u\n", count );
      count = 0;
      if ( c == EOF ) break;
   }
   else
   {
      ++count;
   }
}    

или, может быть, было бы лучше переписать код, используя цикл do-while. Например

unsigned int count = 0;
do
{
   int c = fgetc( FileStream );

   if ( c == EOF || c == '\n' )
   {
      printF( "The length of the line is %u\n", count );
      count = 0;
   }
   else
   {
      ++count;
   }
} while ( c != EOF );

конечно, вам нужно вставить свою собственную обработку чтения xgaracters. Это только пример того, как можно использовать функцию fgetc читать строки из файла.

но если программа написана на C++ тогда было бы намного лучше, если бы вы использовали std::ifstream и std::string классы и функции std::getline читать целую строку.


текстовый файл не имеет \0 в конце строки. Он имеет \n. \n-символ, а не строка, поэтому он должен быть заключен в одинарные кавычки

if (c == '\n')