Member 13527256 Ответов: 2

Нужно ввести текст и не знаю как это сделать


Я должен ввести текст, например
Hello,
world!

Весь текст написан в консоли, любое количество строк.
Тогда я должен напечатать его длину.
Может быть, это и легкая задача, но я понятия не имею, как это сделать.
Это мой код.:
#include <cstdio>
#include <vector>

using namespace std;

int main()
{
	FILE *f = fopen("input.txt", "r");
	char a;
	vector <char> v;
	while (f != NULL && fscanf(f, "%c", &a) != EOF)
		v.push_back(a);
	fclose(f);
	//
	f = fopen("output.txt", "w");
	fprintf(f, "%u", v.size());
	return 0;
}


Что я уже пробовал:

Искал такие же проблемы в Сети;
пробовал использовать типы string, char;
попробовал использовать cin/cout вместо scanf/printf.

2 Ответов

Рейтинг:
12

Richard MacCutchan

По мере чтения каждой строки вы можете использовать strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l[^] чтобы найти его длину.


Member 13527256

Моя проблема - это ввод текста - каких-то строк. Может быть дан любой текст (посмотрите на пример) - несколько предложений, статья из газеты, рассказ и т. д. Но проблема в том, что в конце каждой строки есть символы '\n', и я абсолютно не знаю, как ввести все это в одну строку - ни cin, ни scanf не вводят ее. В моем коде я думаю, что проблема заключается в бесконечном операторе while, но мне не нужно знать, как это изменить.
Я знаю функцию strlen, это не проблема.

Richard MacCutchan

Син И сканф прочитали: жетоны не полные строки. Если вам нужны полные строки, то используйте различные функции/методы. Но не совсем ясно, что именно вы пытаетесь сделать.

Member 13527256

Например:
Пользовательский ввод:
Здравствуйте, //enter
мир!..
Моя программа должна вывести 13.
Но я понятия не имею, как мне заставить его перестать ждать ввода после"!".

Richard MacCutchan

К сожалению, это невозможно. Приложение должно быть сообщено, когда пользователь больше не вводит данные. Таким образом, вы должны использовать какой-то специальный символ, чтобы указать конец текущего набора входных строк, возможно, даже пустую строку.

Member 13527256

В конце концов мне самому удалось найти ответ на этот вопрос:
#включить <cstdio>
#включить <вектор>

использование пространства имен std;

тап_п()
{
Файл *f = fopen("input.txt", "Р");
обуглить;
вектор <char> v;
while (f != NULL && fscanf(f, "%c", &a) != EOF)
В. push_back(а);
fclose(f);
//
f = fopen("output.txt", "w");
fprintf(f, "%u", v. размер());
возвращает 0;
}

Member 13527256

Я использовал файлы для этой задачи, и все работает отлично.

Рейтинг:
10

OriginalGriff

Создайте переменную totalLength. Инициализируйте его до нуля.
Внутри цикла добавьте длину строки, которую Вы читаете, к totalLength.
Когда цикл закончится, выведите totalLength.
Поскольку вы используете char[] для хранения данных, смотрите здесь: Библиотечная функция C - strlen()[^]