Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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 - Fatal编程技术网

如何从文件中提取数据以用作C中的变量

如何从文件中提取数据以用作C中的变量,c,C,在这段代码中,我从用户那里获取行和列的值。 但我想知道的是,我是否可以从文件中提取这些数据,而不是让用户输入它们。 有办法吗 你们能帮帮我吗伙计们我对他的语言很陌生,我甚至不确定我们能不能做到 文件格式5用于行,4用于列: 5,4 您可以使用文件指针访问文件的内容。 地址使用fopen设置,其中第一个参数是文件名的char*,第二个参数是权限的char*,例如读、写、读和写等 如果可以假定文件内容有效,则可以按如下方式打开并读取文件中的两个数字: FILE *fp; fp = fopen("

在这段代码中,我从用户那里获取行和列的值。 但我想知道的是,我是否可以从文件中提取这些数据,而不是让用户输入它们。 有办法吗

你们能帮帮我吗伙计们我对他的语言很陌生,我甚至不确定我们能不能做到

文件格式5用于行,4用于列:

5,4


您可以使用文件指针访问文件的内容。 地址使用fopen设置,其中第一个参数是文件名的char*,第二个参数是权限的char*,例如读、写、读和写等

如果可以假定文件内容有效,则可以按如下方式打开并读取文件中的两个数字:

FILE *fp;
fp = fopen("filename", "r");

if(fscanf(fp, "%d,%d", &row, &col) != 2)) {
    //handle error
    printf("error\n");
}

fclose(fp);
尽管我仍然强烈建议无论如何都要验证这些,并在尝试读取文件之前检查文件是否包含所有必需的数据。

是的,fscanf函数的工作原理与scanf函数非常相似,但允许从文件输入。文件必须首先用fopen打开,我建议检查文件是否为非null,fscanf是否返回文件的非结尾,以便在文件丢失或无效时不会出现未定义的行为。例如,请参见以下代码:

#include <stdio.h>
int main(){
   FILE *fp;
   int row, col;
   fp = fopen("file.txt", "r"); /* open for "r"eading */
   if (fp) {
       if (fscanf(fp, "%d,%d", &row, &col)==2) {
           printf("%d:%d", row, col );
       }
   }
   fclose(fp);
   return 0;
}

当然,C标准库有一个您可以使用的文件系统

下面是一个关于写入和读取文件的示例

int main(void)
{
  FILE *fp;
  char buff[255];

  fp = fopen("/myfolder/myfile.txt", "w+"); /*the w+ makes the file read and write*/
  fprintf(fp, "This text is saved in the file\n");
  fputs("This is another method\n", fp);

  fscanf(fp, "%s", buff);
  printf("%s\n", buff );

  fgets(buff, 255, (FILE*)fp);
  printf("%s\n", buff );

  fclose(fp);
}

这甚至可以编译吗?还请检查来自的返回值scanf@EdHeal不,我这里的问题是如何从文件中提取这些值,而不是让用户输入。我以后不会再使用这些代码了,看看文件I/O和fopen、fscanf等等。为什么不让代码具有容错性呢?是的,但为什么要让事情复杂化呢?使用stdin的操作系统重定向通常是一种更好的方法。%d%d不应该是%d,%d吗?请检查fcanfThank@marco-a的返回值,我不确定我怎么会错过它,我的bad@EdHeal感谢您的建议,我添加了一个基本检查,不过我建议OP根据其用例处理错误。EOF应为2,并且!=应该是==我明白了=EOF会允许col未定义。错过了。固定的
int main(void)
{
  FILE *fp;
  char buff[255];

  fp = fopen("/myfolder/myfile.txt", "w+"); /*the w+ makes the file read and write*/
  fprintf(fp, "This text is saved in the file\n");
  fputs("This is another method\n", fp);

  fscanf(fp, "%s", buff);
  printf("%s\n", buff );

  fgets(buff, 255, (FILE*)fp);
  printf("%s\n", buff );

  fclose(fp);
}