字符串多组输入,直到遇到回车结束输入

在某论坛看到的某大神的写法,学到了学到了!!

    string s;
    while(getline(std::cin,s)&&!s.empty()){
        
    }
    char s[maxn];
	while(gets(s)&&strcmp(s,"")!=0){}

 

### 处理字符串输入中的回车符 当使用`%c`格式化输入,可以接收`\n`这样的空白字符[^1]。这意味着读取单个字符不会跳过任何类型的空白字符,包括换行符。 对于 `%s` 格式的输入,则会自动忽略前置的空白字符并停止于第一个遇到的空白字符之后。因此,在处理以回车结束的一行字符,建议采用其他方法来确保整个行被正确读入而不遗漏或误判终止位置。 一种常见做法是在读取一行文本利用 `fgets()` 函数而不是 `scanf("%s", ...)` 或者逐字节读取方式如 `getchar()` 和 `getc()` 系列函数。`fgets()` 能够安全地读取整行数据直到遇见换行或者达到指定的最大长度减一(留作null终结),这有助于防止缓冲区溢出风险的同保留了原始输入中的换行标记: ```c #include <stdio.h> int main(void){ char buffer[256]; printf("请输入一些文字:\n"); if (NULL != fgets(buffer, sizeof(buffer), stdin)){ // 去除可能存在的结尾换行符 size_t length = strlen(buffer); if ('\n' == buffer[length - 1]){ buffer[length - 1] = '\0'; } puts("您刚刚输入的是:"); puts(buffer); }else{ perror("无法读取输入"); } return 0; } ``` 上述代码展示了如何通过检测并移除由 `fgets()` 返回字符串末尾可能出现的换行符来实现更精确的数据获取。 另外需要注意的是,如果程序逻辑允许的话,还可以考虑使用标准库提供的更高层次接口比如 getline() 来简化操作流程;不过该功能并非 ANSI C 的一部分而是 POSIX 扩展的一部分,所以在跨平台开发场景下需谨慎选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值