0
#!/bin/bash

for i in {10..11}
do
    ./duffing -a 1 -b -1 -u 0.25 -w -1 -A 0.4 -t $i | ./stroboscopic > $i.data
done

$i 似乎在程序参数行中不起作用,但我得到了数据文件。这是错误

error converting i to a double for max-time:
leftover characters: i

Bad input data 
error converting i to a double for max-time:
leftover characters: i

 Bad input data 

这是我在 duffing 程序中解析参数的地方:

void parse_args(int argc, char **argv, state_t *state, system_t *system,
            simulation_t *simulation, int *read_initial, int *print_final)
{
    int ch;
duffing_state_t *duffing = (duffing_state_t *)system->dx_dt_state;
double dtemp;
size_t i;

while (1) {
    ch = getopt_long(argc, argv, short_options, long_options, NULL);
    if (ch == -1)
        break;
    switch(ch) {
    case 'd':
        simulation->dt = safe_strtod(optarg, "time-step");
        break;
    case 't':
        simulation->t_max = safe_strtod(optarg, "max-time");
        break;
    case 'T':
        duffing->T = safe_strtod(optarg, "transient-time");
        break;
    case 'x':
        state->x[0] = safe_strtod(optarg, "x0");
        break;
    case 'v':
        state->x[1] = safe_strtod(optarg, "v0");
        break;
    case 'm':
        system->m = safe_strtod(optarg, "mass");
        break;
    case 'a':
        duffing->a = safe_strtod(optarg, "alpha");
        break;
    case 'b':
        duffing->b = safe_strtod(optarg, "beta");
        break;
    case 'u':
        duffing->u = safe_strtod(optarg, "mu");
        break;
    case 'w':
        duffing->w = safe_strtod(optarg, "omega");
        break;
    case 'A':
        duffing->A = safe_strtod(optarg, "amplitude");
        break;
    case 'E':
        simulation->step_fn = &euler_step;
        break;
    case 'M':
        simulation->step_fn = &midpoint_step;
        break;
    case 'R':
        simulation->step_fn = &rk4_step;
        break;
    case 'i':
        *read_initial = 1;
        break;
    case 'f':
        *print_final = 1;
        break;
    case '?':
        exit(EXIT_FAILURE);
    default:
        fprintf(stderr, "?? getopt returned character code 0%o ??\n", ch);
    }
}

/* convert input from periods to seconds */
simulation->t_max *= 2*M_PI / duffing->w;
duffing->T *= 2*M_PI / duffing->w;

return;
}

我已经使用 -t 10 直接从终端运行程序,所以我很困惑为什么程序拒绝接受来自脚本的输入。

4

0 回答 0