我使用Ubuntu,我也使用Geany和CodeBlock作为我的IDE.

#include <stdio.h>

int main(void)
{
    char name[100];

    printf("Enter your name: ");
    scanf("%s", name);
    printf("Your Name is: %s", name);

    return 0;
}

输出:

Enter your name: Barack Obama
Your Name is: Barack

如何让程序读取整个名称?

推荐答案

使用:

fgets (name, 100, stdin);

100是缓冲区的最大长度.你应该根据需要调整它.

使用:

scanf ("%[^\n]%*c", name);

[]是扫描集字符.[^\n]表示当输入为not时,换行符('\n')接受输入.然后使用%*c从输入缓冲区读取换行符(未读取),*表示该读入输入被丢弃(赋值 suppress ),因为您不需要它,并且缓冲区中的该换行符不会对您可能接受的下一个输入造成任何问题.

在这里阅读关于scansetassignment suppression操作员的信息.

注:你也可以使用gets,但....

千万不要用gets().因为在不事先知道数据的情况下不可能知道get()将读取多少字符,而且gets()将在缓冲区结束后继续存储字符,所以使用起来极其危险.它已经被用来 destruct 计算机安全.请改用fgets().

C++相关问答推荐

try 使用sigqueue函数将指向 struct 体的指针数据传递到信号处理程序,使用siginfo_t struct 体从一个进程传递到另一个进程

为什么getchar()挂起了,尽管poll()返回了一个好的值?""

为什么写入系统调用打印的字符数不正确?

__VA_OPT__(,)是否可以检测后面没有任何内容的尾随逗号?

如果我释放其他内容,返回值就会出错

如何调试LD_PRELOAD库中的构造函数?

在C++中头文件中声明外部 struct

在C23中使用_GENERIC实现带有右值的IS_POINTER(P)?

Linux不想运行编译后的文件

整型文字后缀在左移中的用途

在C++中访问双指针

获取前2个连续1比特的索引的有效方法

用C++高效解析HTTP请求的方法

在C中使用无符号整数模拟有符号整数

赋值两侧的后置增量,字符指针

计算时出现奇怪的计算错误;N Select K;在C中

在NASM中链接Linux共享库时出错-';将R_ X86_64_;foo';

函数指针作为函数参数 - 应该使用 const 吗?

在 C 中传递参数时出现整数溢出

Makefile - 将 .o 文件放入子文件夹中