从输入中获取未知的数字长度

0 c input

我正在进行一项任务,需要输入一个数字列表,并在我按下Enter键盘时获得输出.这是我输入时用于获取数字列表的代码,但它不起作用:

#include <stdio.h>

int main(){
    int arra[100];
    int i ;
    int j = -1;
    while (scanf("%d",&i) != 1){ 
        arra[++j] = i;
    }
    printf("\n");
    int k;
    for(k = 0; k < j; k++){
        printf("%d",arra[k]);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想打印出的元素arra.

pax*_*blo 6

首先,用于测试返回值的巨大荣誉scanf,大多数人只是盲目地认为它有效.你以错误的方式使用它只是一种耻辱:-)

只要返回值是您希望循环继续1,这意味着您设法扫描整数.这意味着它应该是:

while (scanf ("%d", &i) == 1) {
Run Code Online (Sandbox Code Playgroud)

这也意味着任何非数字输入都会导致扫描失败,因此while循环将退出.所以,如果你输入:

3 1 4 1 5 9 stop
Run Code Online (Sandbox Code Playgroud)

您应该成功查看数组中的数值.

唯一的另一件事是清理你的j处理,因为k循环会提前停止.这可以通过以下方式完成:

for (k = 0; k <= j; k++) {
Run Code Online (Sandbox Code Playgroud)

或者,单独保留该循环,只需更改初始化和修改的方式j:

int j = 0;
:
arra[j++] = i;
Run Code Online (Sandbox Code Playgroud)

我倾向于找到更像C的第二个选择,因为j那时是数组中元素的计数而不是最大索引.


而且,当然,由于您假设没有人会输入超过一百个数字,您现在可以接受缓冲区溢出攻击.所以,不要将它作为一个家庭作业解决方案(你对微小的错误修复有足够的好处),但我倾向于把它写成:

#include<stdio.h>

#define SZ 100

int main (void){
  int arra[SZ], i, nxt = 0;

  while ((nxt < SZ) && (scanf ("%d", &(arra[nxt])) == 1))
    nxt++;
  printf ("\n");

  for (i = 0; i < nxt; i++)
    printf ("%d ", arra[i]);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)