【发布时间】:2020-01-29 23:51:13
【问题描述】:
我知道 fgets() 和 gets(),但有人告诉我这两个函数已弃用,所以我宁愿使用其他函数。我使用了scanf,但我遇到的问题是扫描在遇到空格后停止读取,因此如果我输入名字和姓氏,那么它只会返回第一个字符串。这是我使用 scanf 进行用户输入的原始代码,但我意识到如果用户有三个字符串,如 John Doe Smith,那么它只会读取 John Doe。
char firstName[100], lastName[100];
printf("Please enter your first and last name: \n");
scanf("%s%s", firstName, lastName);
这会返回正确的想法,但前提是用户输入两个字符串,例如 John Doe。
从学期开始,我想保持代码简单,不要涉及任何其他看起来太多用不起来的功能。
【问题讨论】:
-
远未弃用
fgets()非常有用。但是gets()不再是有效的 C 函数。您的scanf不适用于两个字的名字或姓氏,例如“Betty Jo Davis”或“Pete Da Silva”,因为%s格式说明符将在第一个空白字符处停止扫描。但它应该适用于两个词,例如名称“John Smith”。 -
这是微软的“安全”理念吗?没有 C 代码是安全的,除了进一步混淆之外,MS 几乎没有做任何事情。正确使用 C 是安全的。
-
MS 会带你走上花园的小路——远离标准 C。他们以为自己在调调,但他们自己却忽略了 C 标准。
-
请注意,用户输入从来都不是简单的,通常是程序中最棘手的部分。
-
@WeatherVane "MS 将带你走上花园之路——远离标准 C" --> 听起来像是他们的营销策略 Embrace, extend, and extinguish
标签: c arrays string scanf user-input