我是C的新手,我想知道如何将字符串与用户的输入结合起来。这就是我所拥有的,但我不确定用户输入是否正确。
#include <stdio.h>
int main ()
{
int a;
int input = scanf("%d", &a);
printf ("Hello, \n" + input);
}
但是这只是要求输入,然后打印到终端“你好”。有谁知道如何解决这个问题?
答案 0 :(得分:1)
首先,scanf
函数不返回匹配的值,而是匹配的值的数量。输入值本身将写入第二个参数指向的内存位置,在您的情况下,变量a
。有关详细信息,请参阅manual page for scanf
(或man 3p scanf
)。
其次,更正确的printf
语句将是这样的:
printf ("Hello, %d\n", a);
格式字符串中的%d
替换为整数a
,例如如果a
等于42,则该语句与printf("Hello, 42\n");
具有相同的效果。 %d
说明符表示相应的参数是整数。有关详细信息,请参阅manual page for printf
(或man 3p fprintf
)。
当您使用"Hello, \n"
运算符直接添加C样式字符串(例如a
)和整数(例如+
)时,不会发生整数到字符串转换。相反,作为第一个操作数的字符串文字被视为char const *
指针,第二个操作数(整数a
)被添加到该指针。在这种情况下,格式字符串会指向一些奇怪的,这可能会导致崩溃或安全漏洞。例如,printf("Hello, World!\n" + 7);
相当于printf("World!\n");
,只输出字符串&#34; World!\ n&#34;。
但是,"Hello, World!\n" + someLargeInteger
将指向生成的二进制文件中的某些其他数据,甚至是二进制文件之外的数据。这将导致未定义的行为并可能导致程序崩溃。另请注意,int
类型的值可能为负值。
答案 1 :(得分:1)
在C中,scanf返回匹配的成功项目的数量。
输入的内容位于a
。
#include <stdio.h>
int main ()
{
int a;
scanf("%d", &a);
printf ("Hello %d\n", a);
}
答案 2 :(得分:1)
&d
读取数字而不是字符。你必须用%s
读取字符,因为你想要像你说的那样组合一个字符串,而scanf不需要返回整数。
char str[200];
scanf("%s", str);
printf("Hello, %s", str);