Истина и Ложь являются логическими значениями. То есть их значения известны и задаются языком. Представьте, что у вас есть что-то вроде:
while 1 < 2:
«1» и «2» - целочисленные литеральные значения. Выражение никогда не меняется, результаты всегда будут одинаковыми. В этом случае результатом является логическое значение, равное True
.
Таким образом, цикл while, который имеет «True» или любое неизменное истинное выражение, такое как 1 < 2
, в качестве условия, будет хотеть запустить «навсегда», потому что он никогда не провалит этот тест. Единственный способ остановить такой цикл - это сгенерировать исключение клавиатуры (обычно нажатием клавиши «Ctrl-C»), или создать где-то неперехваченное исключение внутри кода, или заставить какой-то фрагмент кода выполнить оператор break
. [+1112]
В вашем примере вы складываете числа в given_list2
и останавливаетесь (выполняя break
), когда встречаете отрицательное число. Таким образом, положительные числа суммируются, что составляет 17.
Аналогично, цикл while
, который имеет «False» или любое неизменное ложное выражение в качестве условия, никогда не будет выполняться, потому что самый первый тест while 1 > 2
завершится неудачно, и цикл будет прервать. Это приводит к тому, что внутренний код не выполняется.
В вашем примере вы начинаете с total3 = 0
и никогда не запускаете какой-либо код, поэтому он остается равным 0.
Вам нужен единый поток, открытый и для чтения и для записи.
FileStream fileStream = new FileStream(
@"c:\words.txt", FileMode.OpenOrCreate,
FileAccess.ReadWrite, FileShare.None);
var fs = File.Open("file.name", FileMode.OpenOrCreate, FileAccess.ReadWrite);
var sw = new StreamWriter(fs);
var sr = new StreamReader(fs);
...
fs.Close();
//or sw.Close();
Ключевая вещь состоит в том, чтобы открыть файл с FileAccess. Флаг ReadWrite. Можно затем создать любого Потоковую/Строку/Двоичный файл Читателя/Устройства записи, Вам нужно использование начального FileStream.