扫描 C 中的值直到命中换行符,'n'



我如何才能将我输入到数组中的整数值scanf(),直到我按回车键。

我相信我可以使用getchar() != 'n'

但是如何遍历行呢?

假设我的输入是20 21 2 12 2。我想要一个包含所有这些输入的数组。我可以用什么函数来扫描它们。

  1. 您正在尝试将整数作为字符读取,因此一旦读取,您需要将其转换为整数。
  2. 使用fgets()将该行读入缓冲区,然后解析输入缓冲区以获得整数。
  3. 将整数存储到数组中。

代码看起来像

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");
}

相关内容

  • 没有找到相关文章

最新更新