• C语言2:说心里话


    描述
    分两次从控制台接收用户的两个输入:第一个内容为“人名”,第一个内容为“心里
    话”。
    然后将这两个输入内容组成如下句型并输出出来:
    1.(人名),I want to say,(心里话
    2.
    输入输出示例:
    输入:Kim
    You are beautiful!
    输出:
    Kim,I want to say,You are beautiful!

    (答案在文末,有两种答案)

    错误演示:

    1. #include
    2. int main() {
    3. char name[100];
    4. char thoughts[100];
    5. // 从控制台接收第一个输入
    6. printf("请输入人名:");
    7. scanf("%s", name);
    8. // 从控制台接收第二个输入
    9. printf("请输入心里话:");
    10. scanf("%s", thoughts);
    11. // 组成句子并输出
    12. printf("%s, I want to say, %s\n", name, thoughts);
    13. return 0;
    14. }

     

    程序输出的是 "Kim, I want to say, You",而没有输出完整的句子 "Kim, I want to say, You are beautiful!",可能是因为输入的心里话太长,超出了 scanf 函数读取字符串的默认长度。此时可以使用指定最大长度的方式来接收输入。

    修改 C 语言代码如下:

    1. #include
    2. int main() {
    3. char name[20];
    4. char thoughts[50];
    5. // 从控制台接收第一个输入
    6. printf("请输入人名:");
    7. scanf("%s", name);
    8. // 从控制台接收第二个输入
    9. printf("请输入心里话:");
    10. scanf("%49[^\n]", thoughts); // 指定最大长度为49,并忽略换行符
    11. // 组成句子并输出
    12. printf("%s, I want to say, %s\n", name, thoughts);
    13. return 0;
    14. }

     

    如果在输入心里话时出现 "Kim, I want to say, € @报错" 这样的输出,那么很可能是在输入时发生了中文编码问题。可以尝试以下方法解决:

    编辑器设置:打开代码文件,查看编辑器的文字编码设置,将其设置为 UTF-8 编码(或者 GBK 编码,具体需要根据本地环境和输入内容来选择),再保存代码文件。

    输出调试:在 C 语言程序中加入一些输出语句,以便查看程序的执行情况,比如:

       printf("输入的心里话是:%s\n", thoughts);   // 输出调试信息

     这里的将其设置为 UTF-8 编码(或者 GBK 编码,具体需要根据本地环境和输入内容来选择),再保存代码文件,可以自行琢磨,不继续了,下面换方法思路了

    方法一:使用 fgets 函数来接收用户输入

    所以最终改出来的代码为:

    1. #include
    2. #include
    3. int main() {
    4. char name[20];
    5. char thoughts[50];
    6. // 从控制台接收第一个输入
    7. printf("请输入人名:");
    8. fgets(name, sizeof(name), stdin);
    9. name[strcspn(name, "\n")] = '\0'; // 去除换行符
    10. // 从控制台接收第二个输入
    11. printf("请输入心里话:");
    12. fgets(thoughts, sizeof(thoughts), stdin);
    13. thoughts[strcspn(thoughts, "\n")] = '\0'; // 去除换行符
    14. // 组成句子并输出
    15. printf("%s, I want to say, %s\n", name, thoughts);
    16. return 0;
    17. }

     

    方法二:使用 gets 函数

    1. #include
    2. #include
    3. int main() {
    4. char str1[20], str2[20];
    5. printf("请输入人名:");
    6. gets(str1);
    7. printf("请输入心里话:");
    8. gets(str2);
    9. printf("%s, I want to say, %s\n", str1, str2);
    10. return 0;
    11. }

     

    使用 gets 函数来读取输入。gets 函数在读取一行输入时不会将换行符作为输入的一部分,因此不需要去除换行符。接下来,使用 printf 函数输出组合好的字符串。

    虽然 gets 函数比 fgets 函数用起来更方便,但由于 gets 函数不能限制输入的长度,容易发生缓冲区溢出,造成系统安全漏洞,所以在实际开发中建议使用 fgets 函数,并在读取用户输入前检查输入字符的长度。

  • 相关阅读:
    【SpringMVC】注解开发
    Jacoco+git生成差异代码覆盖率测试报告
    ps[001] 初学创建剪切蒙版
    (附源码)ssm智慧社区管理系统 毕业设计 101635
    C++:string类的常用接口说明及其模拟实现
    SparkCore系列-9、共享变量
    Oauth2系列4:密码模式
    mipi介绍
    WARNING: inbound connection timed out (ORA-3136)
    《你好,放大器》----学习记录(六)
  • 原文地址:https://blog.csdn.net/weixin_60530224/article/details/130897486