【发布时间】:2022-01-15 11:40:16
【问题描述】:
我正在尝试练习一些关于文本文件、打印和读取文本文件的内容。我需要从用户那里获取输入 - 也许是他们的电话号码或其他人的 - 但我希望他们能够在数字之间使用空格
假设我的电话号码是:565 856 12 我希望他们能够给我这个带空格的号码,而不是像 56585612
这样的压缩版本到目前为止,我已经尝试了 scanf(),但我不知道如何让 scanf() 做这样的事情。我试过寻找字符和循环,但它很纠结。
当我输入 565 856 12 并按 Enter 键时,电话号码只会计算 565。 856 12 用于下一个 scanf。
struct Student{
unsigned long long student_phone_number;
}
int main(){
FILE *filePtr;
filePtr = fopen("std_info.txt","w");
struct Student Student1;
printf("\nEnter Student's Phone Number: ");
scanf("%llu",&Student1.student_phone_number);
fprintf(filePtr,"%llu\t",Student1.student_phone_number);
}
【问题讨论】:
-
最好将电话号码视为字符串,而不是整数。前导零不适用于整数。国际前缀(+1、+44 等)不起作用。通常标点符号 - +1 (650)916-2234 - 不起作用。
-
不要将整数用于电话号码等内容。 Integer 只保存一个数字的值,而不是它的表示。它不区分
0123和123,也不允许存储+等特殊字符。 -
谢谢,然后将其视为字符。但是,空间是不是很痛苦?
-
@user9560064 是的,
scanf的嵌入空间很麻烦。你有两个选择:(1) 使用相当神秘和有问题的%[…]格式,或者(2) 根本不使用scanf,改用fgets之类的东西(尽管那样你必须担心尾随\n)。 -
请注意,如果您提供问题的minimal reproducible example,问题往往对其他人更有用。由于您的直接问题只是关于从
stdin输入并将其存储在struct中,而不是关于输出到文件,因此如果您的代码示例仅限于从@987654333 读取,您的问题会更好一些@ 并写信给stdout。相反,通过在问题的发布代码中打开文件以进行输出,您使代码变得比必要的复杂。这可能会降低您的问题获得投票的机会。