扫描 C 中的值直到遇到换行符 '\n'

Scanning values in C till hit a new-line char, '\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 != '[=10=]') && (isspace(*endptr) == 0))
      printf("warning: invalid value detected\n");
  else
      i++;
  p = strtok(NULL," ");
}

您可以使用 strtol() 而不是 atoi() 来将字符串转换为整数。

PS:您的 buf 应该足够大以容纳整行。 fgets() 读到换行符。

如果你使用getchar(),你会一个一个地获取数字,所以你需要 首先将它们存储在缓冲区中,当白色 space 出现时, 您将这些数字转换为数字,并将其存储到数组中。

这是我为您制作的代码的解释。

  • 第一个if语句:如果获取的字符是数字,则将其存储在buf
  • 2nd if 语句:如果获取的字符是白色 space 或 EOL,并且至少 1 个数字存储在 buf 中,将数字转换为数字并将其存储在数组 a 中.
  • 第三个 if 语句:如果获取的字符不是数字或白色 space 或 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] = '[=10=]';
            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");
}