我怎样才能scanf()
在输入数组之前输入数组的整数值。
我相信我可以使用getchar() != '\n'
。
但我如何循环线?
假设我的输入为20 21 2 12 2
。我想要一个包含所有这些输入的数组。
我可以使用哪些函数来扫描它们。
答案 0 :(得分:3)
fgets()
将行读入缓冲区,然后解析输入缓冲区以获取整数。代码看起来像
char buf[300];
int a[5],i=0;
fgets(buf,sizeof(buf),stdin);
char *p = strtok(buf," ");
while(p != NULL)
{
char *endptr;
a[i] = strtol(p,&endptr,10);
if ((*endptr != '\0') && (isspace(*endptr) == 0))
printf("warning: invalid value detected\n");
else
i++;
p = strtok(NULL," ");
}
您可以使用替代strtol()
代替atoi()
将字符串转换为整数。
PS:你的buf
应足够大以容纳整条线。 fgets()
读到换行符。
答案 1 :(得分:0)
如果你使用getchar()
,你会逐个获得数字,所以你需要
将它们首先存储在缓冲区中,当空白区域出现时,
将这些数字转换为数字,并将其存储到数组中。
这是我为您制作的代码的解释。
buf
buf
中至少存储了1位数字,则将数字转换为数字并将其存储在数组a
中。以下代码运行正常。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main(){
#define BUFSIZE 50
#define ARRAYSIZE 5
int i,k,a[ARRAYSIZE];
char c,buf[BUFSIZE];
for(i=0,k=0;(i<BUFSIZE)&&(k<ARRAYSIZE);){
c=getchar();
if(isdigit(c)){
buf[i++] = c;
}else if((i>0) && (c==' ' || c=='\n')){
buf[i] = '\0';
a[k++] = atoi(buf);
i=0;
}else if(!(c==' ' || c=='\n')){
printf("warning : invalid value %c is detected\n",c);
i=0;
}
if(c=='\n'){
break;
}
}
printf("input :");
for(i=0;i<ARRAYSIZE;i++){
printf("%d, ",a[i]);
}
printf("\n");
}