C 读取带空格的字符串

2024-03-26

我正在尝试读取一个可能包含或不包含空格的字符串。 “你好世界”。通过对用户输入的数字选择菜单执行以下操作。这只是我正在尝试做的事情的一个小复制品。

#include <stdio.h>
#include <string.h>

int main(void){
  char line[3][80];

  strcpy(line[0],"default line 1\n");
  strcpy(line[1],"default line 2\n");
  strcpy(line[2],"default line 3\n");

  for(int i = 0; i < 3; i++){
    printf("%s", line[i]);
  }

  int option = 0;
  printf("would you like to replace line 1? (1 for yes)\n");
  scanf("%d",&option);
  if(option==1){
   printf("what would you like to replace the line with?\n");
   fgets(line[0],strlen(line[0]),stdin);
  }

  for(int i = 0; i < 3; i++){
    printf("%s", line[i]);
  }
}

为什么我输入 1 更改行后,它会打印语句询问我要用什么替换它,并且会自动输入任何内容,然后将第一个字符串打印为空?

我也已经尝试过阅读该行sscanf("%[^\n\t]s", line[0]);没有任何运气。有任何想法吗?


这是因为

scanf("%d",&option);

留下\nstdin 中的字符并由第一次调用消耗fgets()。 这就是为什么最好避免scanf()完全用C语言。

您可以使用以下方法修复它:

  scanf("%d",&option);
  getchar(); /* consume the newline */

但我建议使用fgets()读书option以及然后你可以使用strtol() http://man7.org/linux/man-pages/man3/strtol.3.html将其转换为整数。

请注意,此声明可能不是您想要的(这限制了您可以阅读的内容)line[0]).

   fgets(line[0],strlen(line[0]),stdin);

您可能想使用:

   fgets(line[0],sizeof line[0],stdin);

这样您就可以读取到实际大小line[0].

另请阅读 C 常见问题解答条目:http://c-faq.com/stdio/scanfprobs.html http://c-faq.com/stdio/scanfprobs.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 读取带空格的字符串 的相关文章

随机推荐

  • MVP 观点到底有多蠢?

    我正在尝试学习 MVP 但有些事情让我困惑 如果Presenter使用视图作为界面 那么View就不能只是控件的简单渲染 想象一下 尝试编写一个打字练习游戏 其中单词是随机生成到 UI 中的 用户必须在单词从屏幕上落下时输入单词 所以视图将
  • 以编程方式搜索 GMail?

    有没有什么方法可以以编程方式搜索 GMail 最好使用 C 例如 我想获取与搜索匹配的所有电子邮件标签 MyLabel 来自 电子邮件受保护 cdn cgi l email protection 以便我可以根据需要解析电子邮件正文 我发现的
  • 鼠标悬停在绝对定位的 div 上触发

    客观的 当将鼠标悬停在表格单元格上时 表格单元格的右上角会出现一个小的放大镜图标 将鼠标悬停在放大镜图标上并单击它将打开一个对话框窗口 以显示有关特定表格单元格中的项目的详细信息 我想为数百个表格单元重复使用相同的图标 而不是每次都重新创建
  • 以编程方式将库导入到 Databricks 中的工作区

    我想以编程方式添加一个 Python Wheel 库到 SharedDatabricks 上的工作区 在 GUI 中 工作区 gt 导入 gt 库 很容易做到 但我不知道如何在 Databricks CLI 中做到这一点 所以我想我有两种可
  • 如何删除solidity中的数组项

    我正在尝试删除 Solidity 数组中的某个项目 我正在探索一些文章 https ethereum stackexchange com questions 1527 how to delete an element at a certai
  • 获取 Linux 中 Windows 路径的基本名称

    假设我有一个包含 Windows 文件地址的字符串 比方说 local address C TEMP filename txt 从我使用的上述地址检索文件名 import os filename os path basename local
  • 如何计算按 toshortdatestring 分组的表的行数?

    我们有一个具有以下结构的数据库 public partial class ChartData public int Id get set public DateTime Timestamp get set public string Fun
  • java.lang.NoClassDefFoundError:com.google.android.gms.ads.AdView

    我正在编写一段代码来在我的 Android 应用程序中显示 Admob 横幅 为了实现这一目标 我做了以下一些调整 配置的谷歌播放服务库如下 https developers google com mobile ads sdk docs h
  • 在 Whatsapp Business Cloud api 中向多个收件人发送消息

    有没有一种方法可以在一个发布请求中向多个收件人发送消息 与我发送用分号分隔的电子邮件的方式相同 WhatsApp Business Cloud API 中没有选项可以一次性向多个电话号码发送消息 您必须一一发送或通过循环发送消息
  • React Material-UI 禁用处理程序中的按钮

    尝试在用户单击按钮后禁用该按钮 但通过处理程序函数 我参考过这两个类似的问题 React Material UI 禁用时如何为按钮提供自定义颜色 https stackoverflow com questions 55586626 reac
  • ASP.NET FileUpload:选择文件后如何自动回发?

    我正在开发 ASP NET 应用程序 在 FileUpload 控件中选择文件后 我需要回发到服务器 而不必让用户显式单击 提交 按钮 这可能吗 如果是这样 怎么办 我假设您想立即开始上传 如果是这样 您应该对此做出反应changeJava
  • 在 C++ 中访问父命名空间

    我有一个类似以下的场景 class criterion stuff about criteria namespace hex class criterion public criterion does not compile This sh
  • 双精度数据类型的简单数学运算比浮点数据类型更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的双精度数比浮点数快吗 https stackoverflow com questions 158889 are doubles faster than floats in c 我编写了简单的基
  • 使用 Python(或 R)提取 Google Scholar 结果

    我想使用 python 来抓取谷歌学术搜索结果 我找到了两个不同的脚本来做到这一点 一个是gscholar py https github com venthur gscholar另一个是scholar py 那个可以用作 python 库
  • 如何从地图上删除带有粘合圆的标记?

    我确实用标记绑定了圆圈以使视图如下 但是当我尝试从地图上删除标记时 圆圈仍然存在 唔 如何删除带有圆圈的标记 相关代码 function removeMarker if selectedMarker selectedMarker setMa
  • 在 C# 中,有没有办法使用短前缀而不是每个节点的完整命名空间来生成 XDocument?

    我只是想让我的 XML 更整洁 更简洁 我知道在 C 中可以做这样的事情 XNamespace ds http schemas microsoft com ado 2007 08 dataservices new XElement ds M
  • Ruby on Rails 3.0.3 中的自定义变形问题

    我有一个模型叫生产替代品 我在 config initializers inflections rb 中添加了一个新的变形规则 如下所示 inflect irregular produccion alternativa produccion
  • 如何从浏览器获取 Skype 联系人列表?

    我想在浏览器页面中获取我的 Skype 联系人列表 就像https imo im https imo im 可以 Skype API 是如何工作的 对我来说这真的很令人困惑 据我所知 我需要下载 skype4com 才能使其与 PHP 或
  • 设置“Content-Encoding: gzip”时,AFNetworking 无法恢复下载

    我正在使用 AFNetworking2 从我的 AWS S3 存储桶下载文件 一切工作正常 除了当我为文件设置 Content Encoding gzip 时 AFNetworking 无法下载从服务器返回的部分内容响应 它给了我以下错误
  • C 读取带空格的字符串

    我正在尝试读取一个可能包含或不包含空格的字符串 你好世界 通过对用户输入的数字选择菜单执行以下操作 这只是我正在尝试做的事情的一个小复制品 include