2013-07-09 3 views
0

Я использую массив для представления таблицы, и я хочу использовать «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

'getchar()' ничего не меняет, кроме буфера за 'stdin'. Он просто * получает * персонажа. – Kninnug

+0

@Kninnug Я хочу использовать getchar() сохранить вход, а затем изменить значение. Является ли это возможным? – user2185071

+0

@ user2185071 Что заставило вас изменить стоимость? – DzungAh

ответ

0

Вы можете прочитать всю строку с помощью GetChar(), как показано в ответ на этот вопрос: getchar() and reading line by line

Это нетривиальный вопрос. Вот некоторый C-код, который будет читать таблицу, с учетом некоторых ограничений длины строки и максимум в 10 строк. Там также очень мало ошибок. Каждая строка хранится как одна строка, строка. Вам нужно будет разобрать строку для каждой строки позже в цикле, чтобы найти значение каждого столбца. Для этого вы можете использовать strtok() или regex() («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 
    } 
}