【问题标题】:Writing strings on files in ISO C89在 ISO C89 中的文件上写入字符串
【发布时间】:2015-12-06 12:40:16
【问题描述】:

我必须在文件上写一个字符串,一个地址,例如:“Via Leopardi 38”。 我认为循环和逐字符打印是最好的系统,因为它没有与非空终止字符串相关的问题。 问题是当循环到达空字符(“Via”和“Leopardi”之间的空格时,循环结束并且它只写入“Via”。 我可以使用的循环是否有不同的测试条件?

FILE *fo = open(filename,"w");

for (j=0;isalnum(phonebook[i].addr[j])!=0;j++) {


 fprintf(fo,"%c",phonebook[i].addr[j]);

}

【问题讨论】:

  • 你真的在“Via”和“Leopardi”之间使用空字符吗?不是普通的空格(ASCII 0x20)吗?
  • 对不起,我犯了一个愚蠢的错误,我说的是当你按下键盘上的空格键时的空格。

标签: c string file loops ansi-c


【解决方案1】:

空格既不是字母也不是数字,所以isalnum(phonebook[i].addr[j]) 将返回0 并且tle 循环结束。

尝试使用phonebook[i].addr[j]!=0 作为条件。

【讨论】:

  • 它写道:“via leopardi 38ÍÍÍÍÍ”。它应该写“通过leopardi”。我不知道为什么。
  • 您正在使用 isalnum() 进行测试,它接受字母和数字。您似乎只要求字母,这是 isalpha() 测试。如果您需要避免尾随空格,您还需要在循环结束后对其进行测试,或者推迟添加它们直到您检测到至少一个有效字母,
  • @Luke:你的addr 是正确的以零结尾的C 字符串吗?或者它是一个固定大小的数组 - 并且完全填充?当你只是printf它时你看到了什么?
  • 嗯,它是一个字符串,最大大小为 20,属于结构“联系人”以及类似的姓名、姓氏和数字字符串。当我打印它时,我看到“via leopardi 38" 完全没有问题。我的老师不希望字符串区分大小写,所以我必须通过 char 分配来降低它们。我的老师给了我 main.c,我必须开发只有他的函数,使用该死的 curses 库,将要使用的库函数。
猜你喜欢
  • 2019-01-18
  • 2021-02-08
  • 1970-01-01
  • 2020-07-22
  • 2015-12-05
  • 2011-01-30
  • 2022-06-15
  • 2011-10-24
相关资源
最近更新 更多