2009-03-23 3 views
2

HI я хочу реализовать этот код на Си в пакетном файлепакетного файл эквивалент этого кода

int i; 
scanf("%d", &i); 
for(int j = 0;j<i;j++) 
{ 
    scanf("%d",&j); 
    printf("%d",j); 
} 

Я бы запустить программу С, используя> перенаправление в DOS, так что печатная продукция приходит ко мне в файл. Я хочу сделать то же самое в моем пакетном файле, где я мог бы написать что-то вроде

echo %variable% >> file 

, но он не работает для меня

@echo off 
for %%i in (1 2 3) do (
set /p c=enter a name? 
echo %%i 
echo %c% >> file.txt 
) 

что не так?

+0

Вы _sure_, что хотите читать в переменной j и распечатывать адрес j? Ваша петля может вести себя странно, и вы всегда будете печатать то же самое ... –

ответ

4

Это не может работать, так как вам нужно замедленное расширение переменной, когда вы пытаетесь обратиться к изменяющейся переменной в блоке if. Вы можете попробовать следующее:

@echo off 
setlocal enabledelayedexpansion 
for %%i in (1 2 3) do (
    set /p c=enter a name? 
    echo %%i 
    echo !c! >> file.txt 
) 

как это будет оценивать c только тогда, когда код выполняется, не тогда, когда линия (в этом случае полного if заявления) анализируются.

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

@echo off 
set /p i= 
:loop 
set /p j= 
echo %j% 
set /a j+=1 
if %j% LSS %i% goto loop 

Вы можете добавить подсказки, если вы хотите, хотя программа C их не было либо :) , И теперь вы можете направить вывод пакетной программы в целом или просто добавить >> file там для хорошей меры.

+0

Я изменил намеренное решение, которое я ожидал. Я хочу выполнить printf ("% d", j); не & j. Не могли бы вы рассказать мне сейчас. –

+0

Затем этот код уже делает то, что вы хотите. Я неправильно прочитал старый код как printf («% i», j), поэтому я внедрил соответственно. Эй, даже мои переменные называются одинаковыми. Насколько я могу судить, мои командные файлы делают то же самое, что и программа C. – Joey

Смежные вопросы