Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:从文件中读取数字和字符串_C_File Io_Input - Fatal编程技术网

C:从文件中读取数字和字符串

C:从文件中读取数字和字符串,c,file-io,input,C,File Io,Input,我必须从txt文件中读取数据,如下所示: 11 27 12 OY-5158 11 28 12 WM-2037 12 29 46 PY-6651 最后一部分必须在字符串中,它始终有7个字符 我试过这个: #include <stdio.h> #include <stdlib.h> int main() { int i; int sorok; char s[1000]; //Max number of lines FILE *f =

我必须从txt文件中读取数据,如下所示:

  • 11 27 12 OY-5158
  • 11 28 12 WM-2037
  • 12 29 46 PY-6651
最后一部分必须在字符串中,它始终有7个字符

我试过这个:

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

int main()
{
    int i;
    int sorok;
    char s[1000];   //Max number of lines

    FILE *f = fopen("jarmu.txt","r");

    while( (fgets(s, sizeof(s), f)) != NULL) {
      sorok++;
    }

    int idopont[sorok][3];
    char rendszam[sorok][7];

    while (!feof(f))
    {
        for(i=0; i<sorok; i++)
        fscanf(f,"%d %d %d %7s",&idopont[i][0],&idopont[i][1],&idopont[i][2],&rendszam[i]);
    }

    for(i=0; i<sorok; i++)
    printf("%d %d %d %7s\n",idopont[i][0],idopont[i][1],idopont[i][2],rendszam[i]);

    return 0;
}
#包括
#包括
int main()
{
int i;
int sorok;
char s[1000];//最大行数
文件*f=fopen(“jarmu.txt”、“r”);
while((fgets,sizeof,f))!=NULL){
sorok++;
}
int idopont[sorok][3];
char rendszam[sorok][7];
而(!feof(f))
{

对于(i=0;i而言,您的问题很简单:

此时,您只需读取一次文件以获取行数,然后再次解析这些行。您忘记了在两行之间倒带。使用:
fseek(f,0,SEEK_SET);

另外,不要忘记删除
while(!feof(f))
循环包含体

或者,只读取一次文件并直接解析行

下一个问题点:C使用以0结尾的字符串,您没有为以0结尾的字符串保留空间。请也更正此问题

最后一个错误:
fscanf(f,“%d%d%d%7s”、&idopont[i][0]、&idopont[i][1]、&idopont[i][2]、&rendszam[i]);
应该是
fscanf(f,“%d%d%d%7s”、&idopont[i][0]、&idopont[i][1]、&idopont[i][2]、rendszam[i]);

类型应该是
FILE*、char*、int*、int*、int*、char*
。最后一个类型是
char**

请定义“不起作用”的含义。
char rendszam[sorok][7];
-->
char rendszam[sorok][8];
&rendszam[i]
rendszam[i]
,并且,不要使用
!eof(f)
我这样做了,程序运行了,但在它写入数据之后,它会写入一些有趣的东西。这是exe编写的文本的结尾:如果&rendszam[I]->rendszam[I]是那样的话,我已经尝试过了,因为BLUEPIXY的注释,但它没有帮助。程序也会这样做。
rendszam[sorok][7+1]
建议
回放(f);
而不是
fseek(f,0,SEEK\u SET)
。我终于找到了它!int-sorok->int-sorok=0:D谢谢大家:)