使用“getchar”更新数组中的值

时间:2013-07-09 01:31:47

标签: c getchar

我使用数组来表示一个表,我想使用“getchar”来更新表中的值。

 Original table:  0 0 0 0     Input table: 1 0   Output table: 1 0 0 0
                  0 0 0 0                  1 1                 1 1 0 0
                  0 0 0 0                                      0 0 0 0

struct dimension {// represent the number of row and number of col of a table
  int num_row;
  int num_col;
};

void set_value(int t[], 
         const struct dimension *dim,
         const int row, 
         const int col, 
         const int v) {
         t[row*dim->num_col+col] = v;
 }//update the value in a table

    void update (int t[], 
          const struct dimension *table_dim,
          struct dimension *input_dim) {
          for (int k=0; k<(input_dim->num_row); k++){
             for (int l=0; l<(input_dim->num_col); l++){
              array[l] = getchar();
              table_set_entry(array, input_dim, 0, 0,array[l]);
              if (array[l] == '\n') break;
             }
           }

 }

   int main(void) {
         int o[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
         const struct dimension a = {3,4};
         struct dimension in_dim = { 4, 5 };
         update(o,a,in_dim);

  } 

我的想法是我应该创建一个表,并首先将输入表的所有值设置为零。然后根据getchar()更改它。最后,更新原始表。但是,我不知道如何使用getchar来更改值。有人可以帮我吗?如果有什么让你感到困惑,请发表评论。预先感谢。 :)

1 个答案:

答案 0 :(得分:0)

您可以使用getchar()读取整行,如此问题的答案所示:getchar() and reading line by line

这是一个非常重要的问题。这里有一些C代码可以读取表格,但受行长度和最多10行的限制。错误检查也很少。每行存储为一个字符串,一行。您必须稍后在循环中解析每行的字符串以查找每列的值。您可以使用strtok()或正则表达式()(“man 3 regex”)来执行此操作。

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

#define MAXLINE 1024
#define MAXROWS 10

int
main() {
    int inRows = 0;
    int inCols = 0;
    int i;
    int c;
    int line_length = 0;

    char rows[MAXROWS][MAXLINE];

    printf("How many rows in the input table?  ");
    scanf("%d", &inRows);
    getchar();  // get and throw away newline
    printf("How many columns in the input table?  ");
    scanf("%d", &inCols);
    getchar();  // get and throw away newline

    if (inRows < 1 || inCols < 1 || inRows > MAXROWS) {
        printf("Table dimensions of %d rows by %d cols not valid.\n", inRows, inCols);
        exit(1);
    }

    // read inRows lines of inCols each.
    for (i = 0; i < inRows; i++) {
        printf("Input table data for row #%d in the format col1 col2...\n", i);
        while ((c = getchar()) != '\n' && line_length < MAXLINE - 1) {
            rows[i][line_length++] = c;
        }
        rows[i][line_length] = 0;   // nul terminate the line
    }
}