如何解决读取 .txt 文件以更新已存储的 2D 字符数组,但不覆盖原始源有空格的位置
所以我有一个非常令人困惑的问题。我被卡住了几天,所以我跳过了这一步来继续这个项目。为此,我将提供的 .txt 文件更改为显示我需要的输出,而不是继续尝试覆盖我内部详细的二维数组。
我很确定我无法提交修改后的 .txt,因此除非我能够解决这个问题,否则程序将无法运行。
我需要一种方法来将 .txt 文件内容复制到现有的二维数组上,但只更新具有字符的位置。 .txt 文件中的其他位置为空。
.txt 文件示例;
f g s f
a b c d
a b c d
abc d
f g s f
a b c d
a b c d
abc d
a b c d
a b c d
f g s f
我需要将它们复制到一个已经存储的 12x12 字符数组中,如下所示,
char source[12][12] = {
" ---------- ","|..........|"," ---------- ",};
我已经成功地使用下面的代码将 .txt 文件内容写入屏幕,所以我希望有一种方法可以向 for 循环添加一个方法来跳过 .txt 文件中的空白点并只更新.txt 文件中相同对应位置有字符时的二维数组。
我省略了一些细节和原因,因为它是一个作业,但如果它有帮助,.txt 文件中的字符只有 'o'、'b' 和 'blanks'。源和目标都是 12x12。
for (posX = 0; posX < 12; posX++) {
for (posY = 0; posY < 12; posY++) {
printf("%c",source[posX][posY]);
}
printf("\n");
感谢任何帮助,这让我很难过。
---编辑---
到目前为止非常感谢。
我已成功将 10x10 .txt 文件的副本复制到 12x13 阵列。进展..
好消息是我现在只需要担心 .txt 文件中的“”(空白)会覆盖“.”,所以这应该会更简单吗?
我还没有能够创建一个 if 语句来做到这一点。我已经尝试了一些东西,但我现在只是猜测,需要指向一个来源来阅读以了解如何告诉循环;
如果您在 .txt @ [posX][posY] 中看到(空白) - 不要更新源中的相同 [posX][posY] 并继续循环。
非常感谢任何帮助。最后一步也是最重要的一步,在我开始之前需要对它进行排序。
----------
|f g s |
|a b c |
| a b c|
| abc d|
| f g s |
|a b c |
| a b c|
| abc d|
|a b c |
| a b |
----------
fptr = fopen("XXX.txt","r");
for (posX = 1; posX < 11; posX++) {
for (posY = 1; posY < 11; posY++) {
fscanf(fptr,"%c",&source[posX][posY]);
}
fscanf(fptr,&newline);
}
fclose(fptr);
}
解决方法
您只需要检查字符是否与空格字符' '不同,如果不同则插入它,如果它不继续循环。 我不知道你是如何访问文件的。但是循环中应该有类似这样的语句:
if(currentChar != " "){
source[posX][posY]
}
,
由于 source
的大小太小而无法容纳其初始化程序,因此您到处都是 UB。字符串 |..........|
有 12 个字符长,因此它需要一个大小(至少)13 的数组来保存它。将您的初始化程序更改为:
char source[12][13] = {
" ---------- ","|..........|"," ---------- "
};
如果您的代码要求数组的大小恰好为 [12][12],那么您不能对初始化程序使用字符串常量。你需要做更详细的:
char source[12][12] = {
{ ' ','-',' ' },{ '|','.','|' },{ ' ',' ' }
};
(或使用字符串常量初始化前 11 个字符,然后在运行时填充尾部,但这是一个坏主意。)
我不确定这是多么标准(我相信 ...
是一个 gnu 扩展),但一些编译器会允许:
char source[12][12] = {
[0] = { [0] = ' ',[1 ... 10] = '-',[11] = ' ' },[1 ... 10 ] = { [0] = '|',[1 ... 10] = '.',[11] = '|' },[11] = { [0] = ' ',[11] = ' ' }
};
,
我认为主要问题在于您的数据接收技术。您正在做的是,您直接将数据放入您的数组中,而无需验证您的条件是否包含空格。
为了更正它,在你的循环中做一些更新......
char ch;
ch = fgetc(fptr); //get a character from file pointer...
回答你编辑过的部分,如果我正确理解你,你需要在循环中使用这种 if 语句来做同样的事情......现在检查条件以将数据保存在你的数组中。
if(ch == " " || ch == "\n" || ch == "\r" || ch == "\t" || ch == "\0")
{
//TODO:
// handle white spaces here and correspondingly '\n','\r','\t'...
// print or do whatever you want to do...
}
else
{
//here we have only characters and update it to corresponding position in array...
source[posX][posY] = ch;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。