Почему я получаю ошибку потока при одном входе в обработку решений Pike Language?
Непоследовательная обработка решений на языке Pike: ошибка потока с одним входом
Здравствуйте, кто может помочь. Из любопытства изучаю щучий язык. Я заметил, что при вводе двух целочисленных значений решение, которое принимается сразу после ввода, обрабатывается правильно. Однако, когда имеется только один вход, возникает ошибка потока, всегда указывающая решение как ложное, даже если оно истинно.
Эта программа работает корректно:
int main()
{
int X = 0;
int Y = 0;
sscanf(Stdio.stdin.gets(), "%d", X);
sscanf(Stdio.stdin.gets(), "%d", Y);
if (X <= Y)
write("%d\n", X);
else
write("%d\n", Y);
return 0;
}
Эта программа не работает:
int main()
{
int X = 0;
int Y = 0;
sscanf(Stdio.stdin.gets(), "%d", X);
if (X >= 10)
Y = pow(X, 2);
else
Y = pow(X, 3);
write("%d\n", Y);
return 0;
}
Кто-нибудь знает о таком явлении?
Вторая программа, получив целое значение, большее или равное 10, должна отобразить его куб, а для значений, не удовлетворяющих этому условию, она должна вернуть квадрат. Однако значения меньше 10 возвращают куб вместо квадрата.
1 ответ
После просьбы о помощи я продолжил исследования и проведение тестов. Я обнаружил, что, несмотря на кажущуюся необязательность использования фигурных скобок «{}» после «if» и «else», когда имеется только одна операция, на самом деле они необходимы для любого использования. Поэтому указанные коды следует записать следующим образом:
int main()
{
int X = 0;
int Y = 0;
sscanf(Stdio.stdin.gets(), "%d", X);
sscanf(Stdio.stdin.gets(), "%d", Y);
if (X <= Y) {
write("%d\n", X);
} else {
write("%d\n", Y);
}
return 0;
}
int main()
{
int X = 0;
int Y = 0;
sscanf(Stdio.stdin.gets(), "%d", X);
if (X >= 10) {
Y = pow(X, 2);
} else {
Y = pow(X, 3);
}
write("%d\n", Y);
return 0;
}