c - 将用户输入添加到 C 中的数组

标签 c arrays input

我正在尝试用 C 创建程序来读取用户输入。正确的用户输入是[数字][空格][数字]。我读取每个输入字符并检查是否正好有一个空格。当出现 '\n' 时,我需要将所有输入字符存储在数组中。问题是我只有在 '\n' 出现时才知道数组的大小。如何将输入写入数组? 这是我的代码:

#include <stdlib.h>
#include <stdio.h>

int array_size=0;
char input;
int spaces=0;

int main (){
while ((input = getchar())!=EOF){ 
array_size++;
if(input==' '){ //if user input a space
spaces++;
}

if(spaces>1){
fprintf(stderr, "You can input only one space in row\n");
spaces=0;
array_size=0;
continue;
}
if(input=='\n'){ //if thre is only one space and user inputs ENTER
char content[array_size+1];

//here I know array size and need to add to array all chars that were inputed

content[array_size-1]=='\0'; //content is a string
if((content[0]==' ')||(content[array_size-2]==' ')){
fprintf(stderr, "You can't input space only between numbers\n");
spaces=0;
array_size=0;
continue;
}

//then work with array

spaces=0;
array_size=0;
}

}
exit(0);
}

最佳答案

您的代码已损坏。这是一个例子。以此为起点。

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

int main(void) {
  char input[10]; // 10 is just an example size
  int c;          // current character read
  int token_no = 0;
  // we read until EOF
  while ((c = getchar()) != EOF) {  //read chars while EOF
    if(c == '\n')  // or newline
      break;
    if (token_no % 2 == 0) {  // if no of token is even, then we expect a number
      if (isdigit(c)) {
        input[token_no++] = c;
      } else {
        printf("Expected number, exiting...\n");
        return -1;
      }
    } else {
      if (c == ' ') {
        input[token_no++] = c;
      } else {
        printf("Expected space, exiting...\n");
        return -1;
      }
    }
  }
  input[token_no++] = '\0'; // here you had ==, which was wrong

  printf("%s\n", input);

  return 0;
}

输出1:

1 2 3
1 2 3

输出2:

123
Expected space, exiting...

输出3:

1       <- I have typed two spaces here
Expected number, exiting...

关于c - 将用户输入添加到 C 中的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828814/

相关文章:

python - 从列表python的字符串中获取原始列表

java - 在 Java 应用程序中使用 C 源代码的最简单方法是什么?

c - 尝试在 Ubuntu 中打开相对路径不起作用

javascript - 尝试使用 for 循环对对象内的数组求和

php - 使用foreach循环将数据以数组的形式保存到mysql数据库

自定义 shell 仅采用一个参数

r - 在 flexdashboard 中上传文件

C 语言的国际象棋引擎

c - 如何在 Windows 内核驱动程序中编译 OPENSSL(RSA、DSA、HMAC)?

python - 使用 argparse 获取包含 "or ' 的输入