C 替换所有空值';在矩阵中有短语“苹果”

C 替换所有空值';在矩阵中有短语“苹果”,c,matrix,C,Matrix,我的问题是,我想用短语“Apples”来代替null。如果有人可以看看我的代码,告诉我哪里出了问题,我可以申请什么样的修复来完成这项任务,这将是伟大的 输入(文本文件): A、B、C E F G I J K L fscanf读取到空格或“\n” 首先,NULL在文件中是如何表示的 当它达到NULL时,它将停止读取。现在,如果将NULL表示为空格。您可以执行fgetc,因为它一直读到“\n”,并继续您的逻辑。你可以申报 char*s=malloc(..) snprintf(s、%s、苹果) 并将c

我的问题是,我想用短语“Apples”来代替null。如果有人可以看看我的代码,告诉我哪里出了问题,我可以申请什么样的修复来完成这项任务,这将是伟大的

输入(文本文件):

A、B、C

E F G

I J K L


fscanf读取到空格或“\n”

首先,NULL在文件中是如何表示的

当它达到NULL时,它将停止读取。现在,如果将NULL表示为空格。您可以执行fgetc,因为它一直读到“\n”,并继续您的逻辑。你可以申报

char*s=malloc(..) snprintf(s、%s、苹果)

并将char*[]条目分配给s

如果我理解错了,一定要让我知道

while(1)
{
  int num = fscanf(fp, "%s", buffer);
  int ch;
  if(!feof(fp) && num==0)
  // meaning either end of file or not read (space/'\n')
  {
     while(!feof(fp) )
       {
        ch = fgetc(fp);
        if(ch == '\n')
         {
            row += 1;
            col = 0;
            break;
         }
        else if(ch == ' ')
        {

           map[row][col] = strdup("Apple");
           col += 1;
        }
       }
      if(ch == '\n')
        continue;
  }
  if(feof(fp))
     break;

  map[row][col] = (char *)malloc(sizeof(char) * (strlen(buffer) + 1));
  strcpy(map[row][col], buffer); 
}

在您的示例中,一旦空值开始,就不会出现非空值。如果是这样,您可以使用rewind(fp)将指针向后移动1步,然后继续使用fscanf。

您的问题似乎存在于显示大小函数中。它将增大到数组(map)的大小。所有未访问的元素(由于交换行/行)都未初始化,在本例中为NULL

显示时,您需要检查并确保它不为空。如果map被声明为全局变量,则在显示之前检查它是否为null(即如果(map[x][y]==null…)应该没有问题。如果不是,则必须按如下所示填充数组

顺便说一句:正如@kaylum所说,如果map是全局的,那么在显示函数中使用
printf(“%s”,map[row][columns]?map[row][columns]:“Apples”);
是一种必须有效的方法

现在,如果您想改用apple。在“填充”函数中,当您看到新行时,从该索引运行到末尾,并使用apple进行填充。然后在找到文件结尾后,填充apple留下的所有内容:

while{...
 else if (ch == '\n') {
    while (col < 10){ //or col < sizeof(map[0])/sizeof(map[0][0])
       col++
       //malloc map here
       strcpy(map[row][col], "Apple"); }
    row += 1;
    col = 0;
 }...}
 for (; row < 10; row++){ 
  for(; col < 10; col++){ 
    //malloc map[row][col] here
    strcpy(map[row][col],"APPLE");} 
    col = 0;}
而{。。。
else if(ch='\n'){
而(col<10){//或col
我假设map是指向char的二维指针数组?是的。char*map[10][10];请提供一个。另外,输入是什么,输出来自哪里(如图所示的代码没有输出)?最后,花点时间修改代码的缩进,使其更具可读性。我刚刚添加了输入。现在看一看。其余的?您甚至还没有显示生成该输出的代码。您可以编辑我的代码并向我展示您的意思吗?我完全理解您想要说的内容吗?@Zero?:)是的,我明白了,但是有没有办法让数组中的空点保留通行短语呢?如果你不介意的话,你可以告诉我“现在,如果你想改用苹果。在你的填充函数中,当你看到一个新行时,从该索引运行到最后,用苹果填充”我是c语言的新手,所以现在所有这些东西都很让人困惑@zero@enginer14看上面,我发布了输出。哎呀,在那里有一秒钟语言混乱。顺便说一句,使用strcpy而不是直接赋值
while(1)
{
  int num = fscanf(fp, "%s", buffer);
  int ch;
  if(!feof(fp) && num==0)
  // meaning either end of file or not read (space/'\n')
  {
     while(!feof(fp) )
       {
        ch = fgetc(fp);
        if(ch == '\n')
         {
            row += 1;
            col = 0;
            break;
         }
        else if(ch == ' ')
        {

           map[row][col] = strdup("Apple");
           col += 1;
        }
       }
      if(ch == '\n')
        continue;
  }
  if(feof(fp))
     break;

  map[row][col] = (char *)malloc(sizeof(char) * (strlen(buffer) + 1));
  strcpy(map[row][col], buffer); 
}
while{...
 else if (ch == '\n') {
    while (col < 10){ //or col < sizeof(map[0])/sizeof(map[0][0])
       col++
       //malloc map here
       strcpy(map[row][col], "Apple"); }
    row += 1;
    col = 0;
 }...}
 for (; row < 10; row++){ 
  for(; col < 10; col++){ 
    //malloc map[row][col] here
    strcpy(map[row][col],"APPLE");} 
    col = 0;}