1

GNU bc очень нетрадиционный. Я не могу найти в Интернете ничего о том, как заставить его печатать символ новой строки. Я пытаюсь заставить его напечатать первые 16 шестнадцатеричных цифр синусов целых чисел от 1 до 30. Я ожидаю, что что-то вроде этого будет работать:

define mod(x, y) {
    oldscale=scale;
    scale=0;
    result=x%y;
    scale=oldscale;
    return result;
}
obase=16;
x=1;
while (x <= 30) {
    X=2^64*mod(s(x),1)-mod((2^64*mod(s(x),1)),1);
    print X"\n";
    x=x+1;
}

Но это не так.

1 ответ1

1

Просто обнаружил еще одну возможную проблему: если вы используете заглавный символ X , это происходит, когда я пытаюсь использовать его в bc:

X=3
(standard_in) 16: illegal character: X
(standard_in) 16: syntax error

Очевидно, что только строчные буквы являются переменными (со страницы руководства: входные числа могут содержать символы 0-9 и AF. (Примечание: они должны быть прописными. Строчные буквы являются именами переменных).

Поэтому было бы неплохо перейти на другой символ нижнего регистра (поскольку уже есть другой символ нижнего регистра x).


Я просто попытался несколько очень базового тестирования, по- видимому , с помощью print в bc делает его не печатать символ конца строки. Просто поместив переменную / число в собственную строку , выведите новую строку:

$ echo "x=5; print x; print 999; x; 15; print 15; 12345"|bc
59995
15
1512345

Итак, заменив свой print x"\n"; строка только с x; должно сработать?

И использование \n с печатью тоже должно сработать, возможно, у вас возникла проблема с цитированием ... когда я попытался отразить bc используя двойные двойные кавычки (определенно неправильно ;-) или двойные кавычки с одинарными кавычками \n s it терпит неудачу:

$ echo "x=5; print x; print 999; x; 15; print "15\n\n\n"; 12345"|bc
(standard_in) 1: syntax error
$ echo "x=5; print x; print 999; x; 15; print '15\n\n\n'; 12345"|bc
(standard_in) 1: illegal character: '
(standard_in) 1: illegal character: \
(standard_in) 1: syntax error
(standard_in) 1: illegal character: \
(standard_in) 1: illegal character: \
(standard_in) 1: illegal character: '

Но используя одинарные кавычки для эха и двойные кавычки для \n s, это работает

$ echo 'x=5; print x; print 999; x; 15; print "15\n\n\n"; 12345'|bc
59995
15
15


12345

Таким образом, также заменяя вашу print x"\n"; строка с print "x\n"; должно работать тоже?

Информативная цитата из man bc:

распечатать список
Оператор печати (расширение) предоставляет другой метод вывода. "Список" - это список строк и выражений, разделенных запятыми. Каждая строка или выражение печатается в порядке списка. Завершающий перевод строки не печатается. Выражения оцениваются, их значение печатается и присваивается переменной last. Строки в операторе print выводятся на вывод и могут содержать специальные символы. Специальные символы начинаются с символа обратной косой черты (\). Специальные символы, распознаваемые bc: "a" (предупреждение или звонок), "b" (возврат на одну позицию), "f" (перевод формы), "n" (перевод строки), "r" (возврат каретки), "q" ( двойная кавычка), "t" (табуляция) и "\" (обратная косая черта). Любой другой символ после обратной косой черты будет проигнорирован.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .