我正在进行一项任务,需要输入一个数字列表,并在我按下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.
首先,用于测试返回值的巨大荣誉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)
| 归档时间: |
|
| 查看次数: |
742 次 |
| 最近记录: |