程序编译完美,问题是循环,它没有显示我的位置
这里是图书馆stdio.h的包含
openssl_module = Extension('openssl_python',
sources = ['openssl_python.c'],
libraries = ['crypto'])
答案 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
而不是for
。 j
是
运行索引,而不是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,否则返回非零。