C语言中空格等于'\0'吗?我怎样才能避免混淆它们?

Rya*_*yan 2 c string

我正在编写一个函数,用于查找字符串中用逗号分隔的前 4 个整数。

例如,如果字符串是:

123,4,9.5,av4,3,g1,1,6

该函数会将数字提取到不同的数组中:123,4,3,1

一切正常,直到我尝试输入中间有空格的输入,这不应该被视为有效数字,但一旦碰到空格,循环就会停止。有解决办法吗?

我不允许使用除stdio.h.

这是我的代码:

int getParameters(int parameters[], int size) {
  char input[100];
  int indexInput = 0, indexParameters = 0;
  int skip = 0, numberSeen = 0, negativeSeen = 0;
  int i = 0;
  scanf("%s", input);

  for ( ; input[indexInput]!= '\0' && indexParameters < size; ++indexInput) {
    if (input[indexInput] == ',' && skip == 1) {
      parameters[indexParameters] = 0;
      skip = 0;
      negativeSeen = 0;
    } else if (input[indexInput] == ',' && negativeSeen == 1 && numberSeen == 1) {
      printf(ERROR);
      return -1;
    } else if (input[indexInput] == ','&& numberSeen == 1) {
      numberSeen = 0;
      indexParameters++;
    } else if (input[indexInput] == ',') {
      continue;
    } else if (input[indexInput] == '-' && skip == 1) {
      continue;
    } else if (input[indexInput] == '-' && numberSeen == 0 && input[indexInput+1] != '-') {
      negativeSeen = 1;
    } else if (input[indexInput] <= '9' && input[indexInput] >= '0') {
      parameters[indexParameters] *= 10;
      parameters[indexParameters] += input[indexInput] - '0';
      numberSeen = 1;
    } else {
      skip = 1;
    }
  }

  if (skip == 1)
    parameters[indexParameters] = 0;
  while (i < 4) {
    printf("%d,", parameters[i]);
    ++i;
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Kar*_*ath 5

格式说明符的名称%s有点误导,它匹配一系列非空白字符。正如您所看到的,它的目的是读取一个单词,而不是整个字符串。

也许您想阅读整行?

  • @Ryan:使用`getchar()`读取单个字符,使用`fgets()`读取一行(直到并包括终止的`'\n'`)。 (2认同)