C 替换所有空值';在矩阵中有短语“苹果”
我的问题是,我想用短语“Apples”来代替null。如果有人可以看看我的代码,告诉我哪里出了问题,我可以申请什么样的修复来完成这项任务,这将是伟大的 输入(文本文件): A、B、C E F G I J K LC 替换所有空值';在矩阵中有短语“苹果”,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
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;}