【问题标题】:How do i save different kinds of input?如何保存不同类型的输入?
【发布时间】:2020-07-07 10:58:03
【问题描述】:

我试图编写一个 c 程序,其中输入由零、一个或两个正整数(如果是两个,则它们用逗号分隔)和一个字符组成。问题是我需要保存输入,但我真的不知道如何保存,因为我不确定字符之前会有多少个数字。起初我在考虑使用一个结构,但除非有两个数字,否则它不起作用。举个例子,所有这些输入都是正确的:

2,5 c
3,9 d
4 u
2 r
q

感谢您的帮助!

【问题讨论】:

  • 保存在哪里?在内存中的变量中?你试过什么?请edit您的问题包括您的尝试minimal reproducible example,以及您遇到的问题的描述。也请花一些时间阅读the help pages,阅读SO tour,阅读How to Ask,以及this question checklist
  • 作为一些提示:请阅读fgetssscanf 函数。密切关注sscanfreturns.
  • @Andrea - 字符可以是数字吗?
  • 不,必须是字符
  • 所以在创建结构之前我应该​​将输入保存在一个数组中并计算使用了多少个整数?

标签: c input struct


【解决方案1】:

使用文件中的示例,使用fgets 读取每一行。
使用sscanf 解析每一行。
每个值组合都有一个不同的sscanf。如果第一个sscanf 扫描四个值失败,第二个sscanf 尝试扫描三个值,最后尝试扫描一个值。
这仅使用该结构的一个实例。可以使用结构数组或结构的链表。

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

typedef struct Item {
    int one;
    int two;
    char letter;
    char used;
} item;

int main ( void) {
    //int scanned = 0;
    char line[100] = "";
    item values = { 0, 0, 0, 0};
    FILE *fin = NULL;

    if ( NULL == ( fin = fopen ( "file.txt", "r"))) {
        perror ( "file.txt");
        return 1;
    }

    while ( fgets ( line, sizeof line, fin)) {
        if ( 4 == sscanf ( line, "%d%c%d %c", &values.one, &values.used, &values.two, &values.letter)) {
            printf ( "one %d   used [%c]   two %d   letter %c\n"
            , values.one, values.used, values.two, values.letter);
        }
        else if ( 3 == sscanf ( line, "%d%c %c", &values.one, &values.used, &values.letter)) {
            values.two = 0;
            printf ( "one %d   used [%c]   letter %c\n"
            , values.one, values.used, values.letter);
        }
        else if ( 1 == sscanf ( line, " %c", &values.letter)) {
            values.one = 0;
            values.two = 0;
            values.used = 0;
            printf ( "letter %c\n", values.letter);
        }
    }

    fclose ( fin);

    return 0;
}

文件

2,5 c
3,9 d
4 u
2 r
q

输出

one 2   used [,]   two 5   letter c
one 3   used [,]   two 9   letter d
one 4   used [ ]   letter u
one 2   used [ ]   letter r
letter q

【讨论】:

    【解决方案2】:

    我不确定您要将数据保存在哪里。但是在你有很多数据结构来保存你的输入。

    您可以创建一个结构数组示例:

    
    typedef struct data_set_s {
    
     char *name;
     int age;
     char *city
    } data_set_t;
    
    

    如果您不知道数据集的大小,可以使用链表。

    你有一个很好的例子和解释如何创建和理解链表:https://www.geeksforgeeks.org/linked-list-set-1-introduction/

    如果您愿意,可以将输入保存在 .txt 中。

    我不知道我是否正确回答了你的问题

    【讨论】:

    • 我认为在这种情况下结构不起作用,因为我不知道输入有多少个数字,所以我试图将所有输入保存到一个字符串中,然后计算有多少使用了数字。无论如何感谢您的回答
    猜你喜欢
    • 2016-09-19
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2013-08-05
    • 2023-01-24
    • 2016-02-09
    • 1970-01-01
    相关资源
    最近更新 更多