c - 如何使用 scanf() 或 scanf_s() 向用户询问字符串?
问题描述
我将首先说我是 C 和一般编程的新手,这是我第一次问有关在线编程的问题。
我正在使用 Visual Studio 2019。
我正在尝试找到一种方法来询问用户一个单词,例如他们的名字,然后将其打印出来,就像我觉得我的以下代码应该工作一样。
我在网上四处查看,我发现的所有示例都在我尝试运行代码时崩溃,或者当我在它询问名称后输入一个单词时崩溃。我尝试过同时使用 scanf() 和 scanf_s()。
#include <stdio.h>
main()
{
char name[20];
printf("Enter name: ");
scanf_s("%s", name);
printf("Your name is %s.", name);
system("pause");
}
我希望输出是“你的名字是(你输入的名字)”。但是,我似乎根本无法让它工作。任何帮助表示赞赏。
解决方案
使用scanf_s()
方式与使用scanf()
. 你应该使用:
if (scanf_s("%19s", name, sizeof(name)) == 1)
{
…got valid string…
}
else
{
…error handling…
}
或附近。使用scanf()
,您将省略该sizeof(name)
论点。
该"%19s"
格式将跳过前导空白,然后开始保存非空白字符并在第一个空白字符处停止阅读,因此键入Jonathan Bailey
只会读Jonathan
入name
. 如果您想要任何字符,包括空格,那么您需要将格式更改为" %19[^\n]"
(引号和百分比之间的空格非常重要)并确保您以某种方式阅读了行的剩余部分(包括换行符)。格式中的前导空格会跳过输入中的前导空格,包括换行符。不要在格式中添加尾随空格;这是一场 UI 灾难。
此外,请考虑阅读整行fgets()
并处理结果的优点——它避免了一些复杂性。您可以使用sscanf()
读取结果 - 或您自己选择的自定义解析。使用足够大的缓冲区:
char buffer[4096];
if (fgets(buffer, sizeof(buffer), stdin) != NULL)
{
buffer[strcspn(buffer, "\n")] = '\0'; // Zap newline
…process line…
}
推荐阅读
- javascript - 来自环回问题的 mongo 查询
- entity-framework - 从其他应用程序获取 Identity Server 4 用户数据
- tensorflow - 将 MetaGraphDef 转移到 GraphDef 的简单方法?
- javascript - webpack-dev-server如何在不刷新页面的情况下重新加载css
- html - 背景图片没有出现在我的 github.io 上
- security - Zeppelin, Livy, 我可以得到 proxyUser
- java - 通过Java获取特定Kubernetes服务的节点IP
- python - Python,selenium chrome 驱动程序填充表单(元素 id 的变化)
- docker - 带有 GCP 凭据的 Gitlab Runner Image
- javascript - 无法运行程序 ng