2017-04-02 34 views
1

我研究有關操作和運營商集/一個,並從該網站SETLOCAL EnableDelayedExpansion但仍不知我的代碼最終告訴 我,我的操作數丟失。如何解決這個斐波納契批處理列表?

@echo off 
cls 
setlocal EnableDelayedExpansion 
color 0a 
title Fibonacci Lister 
:Fibonacci 
cls 
set /a n1=1 
echo %n1% 
set /a n2=1 
echo %n2% 
set /a j=3 
:loopfunction 
set /a n%j%=!n%j-1%!+!n%j-2%! 
echo !n%j%! 
set /a j=%j%+1 
goto :loopfunction 

所以我想知道這裏有什麼問題。它可能在第14行,其中 的代碼很複雜,很難很容易理解。

回答

1

在線#14,您正在使用未聲明的名爲%j-1%%j-2%的變量。

更新後的腳本:

@echo off 
    setlocal EnableDelayedExpansion 
    color 0a 
    title Fibonacci Lister 
:Fibonacci 
    set /a n1=1 
    echo %n1% 
    set /a n2=1 
    echo %n2% 
    set /a j=3 
:loopfunction 
    set /a j1=j-1&set /a j2=j-2 
    set /a n%j%=!n%j1%!+!n%j2%! 
    if "!n%j%!"=="1836311903" goto :EOF 
    echo !n%j%! 
    set /a j=j+1 
goto :loopfunction 
+0

謝謝,它的實際工作!我在第18行和第19行之間添加了ping localhost> nul,以將生成過程延遲到可查看的時間範圍。 – kornkaobat

+0

哦,以便修復達到更高值時出現的負值。大! – kornkaobat

1
@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set n1=0 
    set n2=1 
:loop 
    echo %n2% 
    set /a "n2=n1+n2" & set "n1=%n2%" 
    if %n2% gtr 0 goto loop 
+0

我讚賞你的回答,這可能會導致更新的想法,將我的代碼簡化爲更合理的方式,但它沒有修復我發佈的原始代碼,所以我只能給你加票,但它沒有解決我有問題的問題。抱歉。 – kornkaobat

+4

@kornkaobat,我看到Sam Denty的答案解決了你的問題,所以沒有任何理由以同樣的方式解決問題。我唯一的意圖是包括解決任務的另一種方式,以防萬一找到這個問題的人發現它有用。 –

+0

哦,那好吧。所以沒有複製的問題,進一步的讀者可以找到更多的答案來解決這個問題。謝謝澄清! – kornkaobat