코드를 수정해야 하나요?
i=0; bil_genap=0;
bil_ganjil=0;
echo -n "Batas loop : ";
read batas;
if [ -z $batas ] | [ $batas -lt 0 ]; then
echo "Ops, tidak boleh kosong atau Batas loop harus >= 0";
exit 0;
fi
while [ $i -le $batas ]; do
echo -n "$i,";
if [ `expr $i % 2` -eq 0 ]; then
let bil_genap=$bil_genap+1;
else
let bil_ganjil=$bil_ganjil+1;
let i=$i+1;
fi
done
답변1
사소한 문제 외에도 다음 사항에 밑줄을 쳐야 합니다.
if [ -z $batas ] | [ $batas -lt 0 ]; then
~이 되다
if [ -z $batas ] || [ $batas -lt 0 ]; then
대신에:
if [ `expr $i % 2` -eq 0 ]; then
당신은 그것을 사용할 수 있습니다
if (( $i % 2 == 0 )); then
답변2
이 기사에는 정보가 부족하여 이것이 나에게 이상하고 매력적인 도전이 되었습니다. 먼저, 로봇 번역가는 언어가 말레이어라고 말했고 "batas"는 "한계" 또는 "경계"를 의미하고 genap은 "짝수"를 의미하고 간질은 "이상함"을 의미하며 경고 메시지는 "Ops"와 같은 것이라고 추측했습니다. 비워 둘 수 없거나 제한 루프가 0보다 커야 합니다."
따라서 코드는 입력 값을 요청하고 값이 비어 있지 않고 0 이상인지 확인한 다음 실행하면 무한 반복되어 터미널에 0을 보냅니다. 인코더의 최종 목표가 무엇인지 잘 모르기 때문에 올바른 방법으로 "고정"했는지는 확실하지 않지만 "let i=i+1;" 줄을 "else" 문 밖으로 이동하면 됩니다. , 무한 루프 대신 입력의 루프 한계까지 0부터 카운트하여 출력합니다. 또한 도중에 만나는 짝수와 홀수의 수도 계산합니다. 코드는 있는 그대로 이러한 개수에 대해 아무 작업도 수행하지 않습니다. 어쩌면 더 큰 코드 조각일 수도 있습니다. 어쩌면 누군가가 재미를 위해 실험하면서 작성한 장난감 프로그램일 수도 있습니다. 어쨌든, 짝수 및 홀수 수를 출력하는 행이 추가된 "번역된" 버전은 다음과 같습니다.
i=0;
even_num=0;
odd_num=0;
echo -n "Limit of loop : ";
read loop_lim;
if [ -z $loop_lim ] | [ $loop_lim -lt 0 ]; then
echo "Ops, Limit of loop cannot be empty and must be >= 0";
exit 0;
fi
while [ $i -le $loop_lim ]; do
echo -n "$i,";
if [ `expr $i % 2` -eq 0 ]; then
let even_num=$even_num+1;
else
let odd_num=$odd_num+1;
fi
let i=$i+1;
done
echo
echo $even_num
echo $odd_num