如何将字符串添加到我从scanf
获取的字符串中?
这样做:
char animal[size];
scanf("%s", animal);
然后添加“它是animal
吗?”无论输入什么,然后再将整个事物作为animal
返回。
例如,如果我为animal
输入'duck',它将使动物返回“它是鸭子吗?”
另外,我应该首先将?
添加到animal
然后添加“它是否为”?
答案 0 :(得分:2)
这是一个快速而肮脏的工作示例,说明如何做到这一点。
然而,它不是非常安全/万无一失。例如,您可以使用animal
轻松覆盖scanf()
缓冲区。另外,如果您更改sprintf()
中字符串的格式,则需要确保str
有足够的空间。
#include <stdio.h>
int main()
{
char animal[20];
char str[29];
animal[19] = 0; /* make sure animal is 0-terminated. Well, scanf() will 0-term it in this case anyway, but this technique is useful in many other cases. */
printf("Name the beast (up to 19 characters): ");
scanf("%s", animal);
sprintf( str, "Is it a %s?", animal );
puts(str);
return 0;
}
这是一个有点改进的版本。我们确保我们不会读取比animal
缓冲区可以容纳的更多字符,为最容易维护的情况定义最大动物名称长度的预处理器宏,在用户输入的字符超出要求时捕获大小写,摆脱终止用户输入的换行符。
#include <stdio.h>
#include <string.h>
#define MAX_ANIMAL_NAME_LEN 9
int main()
{
/* 1 char for 0-terminator + 1 to catch when a user enters too
many characters. */
char animal[MAX_ANIMAL_NAME_LEN + 2];
char str[MAX_ANIMAL_NAME_LEN + 11];
printf("Name the beast (up to %d characters): ", MAX_ANIMAL_NAME_LEN);
fgets( animal, MAX_ANIMAL_NAME_LEN + 2, stdin );
{
/* fgets() may include a newline char, so we get rid of it. */
char * nl_ptr = strchr( animal, '\n' );
if (nl_ptr) *nl_ptr = 0;
}
if (strlen(animal) > MAX_ANIMAL_NAME_LEN)
{
fprintf( stderr, "The name you entered is too long, "
"chopping to %d characters.\n", MAX_ANIMAL_NAME_LEN );
animal[MAX_ANIMAL_NAME_LEN] = 0;
}
sprintf( str, "Is it a %s?", animal );
puts(str);
return 0;
}
正如其他用户所指出的那样,C语言中的字符串作为C语言本身,可能会相当棘手。进一步的改进将是你的功课。搜索引擎是你的朋友。快乐学习!
您可能要注意的一个危险的陷阱是,如果用户键入的内容超过fgets()想要接受,则仍然可以从STDIN读取输入。如果稍后调用fgets()或其他输入函数,您将读取那些额外的字符,这可能不是您想要的!请参阅以下帖子:
How to clear input buffer in C?
感谢chux指出这一点。
答案 1 :(得分:0)
如果你只想显示&#34;它是___?&#34;你可以像
一样输出它char animal[size];
scanf("%s", animal);
printf("Is it a %s?", animal);
答案 2 :(得分:0)
如何将字符串添加到我从scanf
获得的字符串?
添加两个不同的字符串,。
#include <stdio.h>
#include <string.h>
int main(void)
{
char animal[20], text1[20] = "Is it a ";
scanf("%11s", animal);
strcat(text1, animal);
printf("%s\n", text1);
return 0;
}