首先,我是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");
}
我希望输出为“您的名字是(您输入的名字)”。 但是,我似乎根本无法使它工作。 任何帮助表示赞赏。
答案 0 :(得分:1)
使用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…
}