我如何才能将我输入到数组中的整数值scanf()
,直到我按回车键。
我相信我可以使用getchar() != 'n'
。
但是如何遍历行呢?
假设我的输入是20 21 2 12 2
。我想要一个包含所有这些输入的数组。我可以用什么函数来扫描它们。
- 您正在尝试将整数作为字符读取,因此一旦读取,您需要将其转换为整数。
- 使用
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 != ' ') && (isspace(*endptr) == 0))
printf("warning: invalid value detectedn");
else
i++;
p = strtok(NULL," ");
}
您可以使用strtol()
替代atoi()
来将字符串转换为整数。
PS:你的buf
应该足够大,以容纳整条线。fgets()
读到换行符。
如果您使用getchar()
,您将逐个获得数字,因此您需要首先将它们存储在缓冲区中,当空白出现时,你将这些数字转换成一个数字,并将其存储到数组中。
这是我为你编写的代码的解释。
- 第一个if语句:如果获得的字符是数字,将其存储在
buf
- 第二个if语句:如果获得的字符是空格或EOL,并且
buf
中存储了至少1位数字,则将其转换为数字并存储在a
数组中。 - 第三条if语句:如果获得的字符不是数字、空格或EOL,则警告用户。
- 第4条if语句:如果获得的字符是EOL,则结束循环。
下面的代码可以正常工作。
#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] = ' ';
a[k++] = atoi(buf);
i=0;
}else if(!(c==' ' || c=='n')){
printf("warning : invalid value %c is detectedn",c);
i=0;
}
if(c=='n'){
break;
}
}
printf("input :");
for(i=0;i<ARRAYSIZE;i++){
printf("%d, ",a[i]);
}
printf("n");
}