【问题标题】:How can I do C language program with matrix of strings?如何使用字符串矩阵进行 C 语言程序?
【发布时间】:2017-12-01 12:43:35
【问题描述】:

我有一个问题,我试图让一个 C 程序读取一个 50 行 11 列的文件,问题是这个文件完全由字符串组成,我做了这个:

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

typedef struct
{
char nome[100];
char dica[10][300];
} PAIS;

void main()
{
int i;
i = 0;

PAIS paises[50];
char nome[30];

FILE *arq;

arq = fopen("Dicas3.txt", "r");

//fscanf(arq,"%s", nome);
//printf("%s", nome);

while(!feof(arq))
{

    fscanf(arq,"%s %s %s %s %s %s %s %s %s %s %s", paises[i].nome, paises[i].dica[0][0], paises[i].dica[1][0], paises[i].dica[2][0], paises[i].dica[3][0], paises[i].dica[4][0], paises[i].dica[5][0], paises[i].dica[6][0], paises[i].dica[7][0], paises[i].dica[8][0], paises[i].dica[9][0]);

    printf("%s %s %s %s %s %s %s %s %s %s %s", paises[i].nome, paises[i].dica[0][0], paises[i].dica[1][0], paises[i].dica[2][0], paises[i].dica[3][0], paises[i].dica[4][0], paises[i].dica[5][0], paises[i].dica[6][0], paises[i].dica[7][0], paises[i].dica[8][0], paises[i].dica[9][0]);
    i++;
}



    system ("PAUSE");
}

程序编译,但程序不工作。拜托,有人能告诉我如何做一个程序来读取一个 50x11 的矩阵并在窗口中打印这个矩阵吗?

矩阵在这个文件中(是​​葡萄牙语,但这个矩阵是 os 字符串):

https://drive.google.com/file/d/1BLhGSHIx69Ycrasgtl4lKyxxKPRlSAv2/view?usp=sharing

【问题讨论】:

  • 但程序不工作。这是什么意思?
  • 请提供 Dicas3.txt 文件的示例。
  • 你得到了什么?你能指望什么?举一些例子可以更好地解释你喂什么。
  • 要使用fscanf 读取字符串,您必须提供指向字符串空间的指针。所以将paises[i].dica[0][0] 替换为paises[i].dica[0]printf 也一样。

标签: c string file matrix vector


【解决方案1】:

不要使用feof()找出Why is “while ( !feof (file) )” always wrong?的原因

如果您提前了解no of linescolumns,因为在每行中有11 个列/字符串,请使用fgets() 而不是fscanf() 从文件中读取line by line。如果你想让它成为通用解决方案,我的建议是使用 动态数组 而不是 local array

nome[] 包含什么,不清楚? 使用 fscanf() :

typedef struct
{
    char nome[100];
    char dica[10][300];
} PAIS;
int main()
{
    PAIS paises[50];
    char nome[30];
    FILE *arq;
    arq = fopen("Dicas3.txt", "r");
    if(arq == 0) {
        printf("file not present:\n");
        return 0;
    }
    int i=0,j=0;
    char ch;
    while(fscanf(arq,"%s",paises[i].dica[j])>0) {
        printf("%s  ",paises[i].dica[j]);
        j++;//column
        if((ch = fgetc(arq))=='\n')//when new lines occures, start reading from next lines, do i++
        {
            i++;//rows or lines 
            printf("\n");//manuaally put the new line or use fputc(ch,stdout)
            fseek(arq, -1, 1);//move one letter back 
            j=0;
        }
        else
            fseek(arq, -1, 1);//move to exact position
    }
    return 0;
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    相关资源
    最近更新 更多