C 当存在空格时,如何停止存储文件中的字符

C 当存在空格时,如何停止存储文件中的字符,c,arrays,file,C,Arrays,File,我需要得到一个线索,在我点击单词之间的空格后,如何知道何时停止存储文件中的字符串。在我打开一个文件并读取它之后,例如:那里的第一行是:427 671+。我需要将“427”存储在int数组中,与变量中的“671”和“+”相同 到目前为止,我已经知道了如何读取整行内容并打印出来,但我的问题是在我找到一个空格之前逐字读取并存储它 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <

我需要得到一个线索,在我点击单词之间的空格后,如何知道何时停止存储文件中的字符串。在我打开一个文件并读取它之后,例如:那里的第一行是:427 671+。我需要将“427”存储在int数组中,与变量中的“671”和“+”相同

到目前为止,我已经知道了如何读取整行内容并打印出来,但我的问题是在我找到一个空格之前逐字读取并存储它

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
#include <Laboratorio.h>
#include <string.h>
int main(int argc, char **argv) {
  FILE *datos;
  FILE *resultados;
  char bin[64]="",hex[16]="";
  int oct[21];
  ep = fopen ( argv[1], "r" );
  if (ep==NULL) {
        printf("Archivo vacio.");
    return 0;
    }else{
    while (fgets(bin,64,ep)!=NULL){
      printf("%s",bin);
    }
  fclose(ep);
}
}
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,字符**argv){
文件*datos;
文件*resultados;
字符位[64]=“”,十六进制[16]=“”;
国际10月[21];
ep=fopen(argv[1],“r”);
if(ep==NULL){
printf(“archivovacio”);
返回0;
}否则{
while(fgets(bin,64,ep)!=NULL){
printf(“%s”,bin);
}
fclose(ep);
}
}

最简单的方法是使用char变量,并将每个char逐个存储到其中,如下所示:

while ((ch = getc(stream)) != EOF) 
{
// do stuff with char
}
在得到字符后,您可以决定如何处理它,将其与32(空格)进行比较,以知道何时停止

如果char是一个数字,您可以将它放在缓冲区中,直到到达一个空格,那么您所需要做的就是使用函数atoi,它接收指向字符串的指针,并返回字符串的int表示形式。
例如:将字符串“432”转换为int 432。

如果无法打开文件,则应将错误消息打印到stderr,并返回非零值。例如
if(ep==NULL){perror(argv[1]);return EXIT_FAILURE;}
在遇到空白时用于分割。您有很多选择。一种是使用
scanf()
%s
转换说明符;它每次都在空白处停止。另一种方法是在阅读每一行时在行上使用标记化代码-
strtok()
等(如果可用,则使用
strtok\r()
strtok\s()
,但这些都会修改原始字符串),或者使用
strpbrk()
strspn()
等函数。关于后缀到中缀的转换以及相关问题,有很多疑问;他们可能也会有所帮助。