scanf () берут '\n' в качестве входного остатка от предыдущего scanf ()?

Если легким Вы имеете в виду строки кода, которые легко дешифровать, но на неэффективный шанс?

string[] lines = System.IO.File.RealAllLines($filename);
int cnt = lines.Count();

Это - вероятно, самый быстрый способ знать сколько строк.

Вы могли также сделать (в зависимости от того, если Вы буферизуете его в)

#for large files
while (...reads into buffer){
string[] lines = Regex.Split(buffer,System.Enviorment.NewLine);
}

существуют другие многочисленные пути, но одно из вышеупомянутого, вероятно, с чем Вы пойдете.

5
задан Jonathan Leffler 22 December 2013 в 21:26
поделиться

1 ответ

scanf оставляет входной поток, указывающий на \ n . В вашем случае это не имеет значения: каждый раз, когда он вызывается, scanf будет перемещаться, пока не найдет следующий непробельный символ. Таким образом, указание 10 строк name, a, b в качестве ввода будет работать так, как вы ожидаете.

Но учтите следующее:

scanf("%d", &a);
fgets(str, 20, stdin);

fgets читает, пока не найдет первый символ новой строки, поэтому str просто получит значение \ n , а fgets не прочитает следующую строку ввода.

5
ответ дан 14 December 2019 в 19:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: