语言C中for循环中的问题

时间:2018-02-19 00:24:22

标签: c for-loop

程序编译完美,问题是循环,它没有显示我的位置

这里是图书馆stdio.h的包含

openssl_module = Extension('openssl_python',
                       sources = ['openssl_python.c'],
                       libraries = ['crypto'])

2 个答案:

答案 0 :(得分:1)

提示,您应该始终在循环之前或循环中将循环计数器设置为0。在声明期间初始化所有变量始终是一个好习惯。在您的情况下,您没有初始化整数数组。以下是您的代码的修改版本。

int main(void)
{
    int x, i, j;
    x = i = j = 0;

    int a[100] = { 0 };

    char sal = 0;

    printf ("Este programa lee un arreglo de numeros enteros y un numero x, "
            "y muestra en pantalla los indices de las posiciones en donde se "
            "encuentra ese numero x\n");

    while(1)
    {
        printf("Ingrese un numero: ");
        scanf("%d", &a[i]);

        i++;

        printf("Si desea salir presione s: ");
        scanf(" %c", &sal);

        if (sal == 's')
            break;

    }

    printf("Ingrese el valor de la variable x: ");
    scanf("%d", &x);

    for (j = 0; j <= i; j++)
    {
        if (a[i] == x)
            printf("%d", i);
    }
    printf("\n");

}

答案 1 :(得分:1)

for循环的条件应为j<i,而不是j<i+1。当while 循环退出,i具有下一个输入的值,但尚未设置,因为 循环退出。

此外,您在i - 循环中使用索引j而不是forj是 运行索引,而不是i

for (j; j<i; j++)
{
    if(a[j]==x) 
        printf("%i", j);
}

是正确的。

你的while循环没问题,但有点笨重。首先,你不要检查你是否 超过a的限制。条件应该是

while(sal!='s' && i < (sizeof a / sizeof *a));

这样用户就无法输入比a更多的值。

退出循环的方式也很尴尬,用户必须键入内容 与s不同,以继续,它只能是一个字符。这将是 更好:

int c;
char line[100] = { 0 };
do
{
    printf("Ingrese un numero: ");
    scanf("%i", &a[i]);
    while((c = getchar()) != '\n' && c != EOF); // to clear the input buffer
    i++;

    printf("Si desea salir ingrese SALIR. Para continuar presione ENTER: ");
    fgets(line, sizeof line, stdin);

} while(strcmp(line, "SALIR\n") && strcmp(line, "salir\n") && i < (sizeof a / sizeof *a));

请注意,strcmp在字符串相等时返回0,否则返回非零。