Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C fprintf语句中\b转义序列有问题。。?_C_File_Formatting_Printf - Fatal编程技术网

C fprintf语句中\b转义序列有问题。。?

C fprintf语句中\b转义序列有问题。。?,c,file,formatting,printf,C,File,Formatting,Printf,我正在尝试编写一个程序,从文件中读取一个学生编号7位字符串,用x替换前3位,并将结果打印到一个新文件中。我可以使用printf语句在屏幕上打印来完成我想做的事情,但是当使用fprintf时,新文件中的结果不是我想要的。以下是相关代码行: studentno=1234567 fprintf(fp2, "%s\b\b\b\b\b\b\bxxx\t", studentno); 在printf语句中,结果是预期的xxx4567。然而,在fprintf语句中,当我打开新文件时,它显示1234567xxx

我正在尝试编写一个程序,从文件中读取一个学生编号7位字符串,用x替换前3位,并将结果打印到一个新文件中。我可以使用printf语句在屏幕上打印来完成我想做的事情,但是当使用fprintf时,新文件中的结果不是我想要的。以下是相关代码行:

studentno=1234567
fprintf(fp2, "%s\b\b\b\b\b\b\bxxx\t", studentno);
在printf语句中,结果是预期的xxx4567。然而,在fprintf语句中,当我打开新文件时,它显示1234567xxx。我真的不知道为什么,因为其他转义序列,如'\n'或'\t'在fprintf语句中的工作方式与在printf语句中的相同。如果有人能给我指出发生这种情况的正确方向,那就太好了。

您正在文件类型上使用它。 如果它是一个文件,它将由文本编辑器来做它想做的事情。如果它确实是另一端的终端,则需要检查它是否正确处理这些转义字符

它甚至可能是不允许在printf函数族中使用一些转义字符,但我不确定。在我看来,如果你能同时避免它们,那就容易多了

无论如何,我建议只重写printf或fprintf语句即可:

fprintf(fp2, "xxx%s", studentno + 3);

这将写入xxx,然后从第四偏移开始写入studentno的字符。更容易,一定会成功

您将printf/fprintf的格式代码与终端代码混合在一起,后者指示终端执行某些操作

此处列出了f/printf的允许格式代码,您会注意到\b不是其中之一:


发生的情况是,当您在终端上显示您正在创建的字符串时,终端将\b应用于退格,并有效地显示您想要的字符串,但当您将其打印到文件时,它没有效果。有很多方法可以满足您的需要,但我建议您只需将文件中的学号作为字符串读取,然后在数组中对其进行处理。

不确定我打开新文件时您的意思。你用编辑器打开它吗?猫我怀疑vi newfile的显示可能与cat newfile不同。因为不同的软件规范标准输出与您的文本编辑器可能会显示不同的\b或根本不显示

在任何情况下,如果您试图在屏幕上隐藏studentno的前3位数字,使用backspaces都是一种不好的方法。不可靠的和脆弱的。黑客可以通过将输出重定向到文件来轻松获得完整的数字,并且没有办法阻止它。我同意rowan.G的回答。

怎么样:fprintffp2,xxx%d,学生号%10000;