【问题标题】:Writing two variables in same scanf_s在同一个scanf_s中写入两个变量
【发布时间】:2019-10-24 15:35:08
【问题描述】:

所以我想在同一个scanf_s 中写两个变量。也许我什至没有使用正确的名称来描述我想要的东西,因为我是新手,但基本上我希望它是这样的:

What is your last and first name: John Smith
Thank you now I know that your first name is John and your last name is Smith

我写的是这样的:

#include <iostream>

int main(void)
{
    char myFirstName[20];
    char myLastName[20];

    printf("\nWhat is your first and last name: ");
    scanf_s("???")
    printf("Thank you now I know that your first name is %s", myFirstName); printf(" and your last name 
    is %s\n",myLastName);

    getchar();
    return 0;
}

而且我不知道应该如何编写 scanf_s 部分来包含两个变量(myFirstNamemyLastName),所以它会按照我的意愿出现。

【问题讨论】:

  • 你能用scanf_s读取一个字符串吗?对于scanf(以及scanf_s等相关函数)或printf,格式说明符的数量没有真正的限制。
  • 没有 C 头 iostream。你用 C 或 C++ 编译器编译吗?这些是不同的语言。
  • Don't use scanf to read interactive input;它无法处理用户输入的内容与您的预期不同。使用fgets 读取用户键入的整行内容,然后使用strsep 等函数对其进行解析。 Don't use scanf_s, or any of the other _s functions, at all;它们不可移植,也不能解决它们想要解决的问题。

标签: c scanf


【解决方案1】:

如果你的两个输入不包含空格字符,你可以这样写:

if (scanf_s("%19s%19s",
    myFirstName, (unsigned)sizeof(myFirstName),
    myLastName, (unsigned)sizeof(myLastName)) != 2) {
    puts("input failed");
    return 1;
}

点数:

  • 您可以在格式字符串中指定多个转换说明符。
  • %19s 是用于读取字符串 "%s" 的格式分隔符,限制为最多保存 19 个字符和一个终止 NUL 字符。
  • 通过scanf_s 读取字符串或字符时,必须在每个指向缓冲区的指针之后指定unsigned 类型的缓冲区大小。
  • scanf_s返回成功读取数据的数量,所以应该检查是否读取了足够的数据。

参考:

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l | Microsoft Docs

【讨论】:

猜你喜欢
  • 2021-01-28
  • 2017-09-03
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 2017-04-19
  • 2022-12-08
相关资源
最近更新 更多