首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在do while循环中使用gets退出读取两个字符串

,可以通过以下步骤实现:

  1. 首先,定义两个字符串变量用于存储输入的字符串,例如str1和str2。
  2. 使用do while循环来读取字符串,循环条件为输入的字符串不为空。即使用gets函数读取字符串,并将其赋值给str1。
  3. 在循环体内,再次使用gets函数读取第二个字符串,并将其赋值给str2。
  4. 在循环体的末尾,使用条件判断语句来检查str1和str2是否为空字符串。如果其中任意一个为空字符串,则退出循环。
  5. 在退出循环后,可以对读取到的字符串进行进一步处理或者输出。

以下是一个示例代码:

代码语言:txt
复制
#include <stdio.h>
#include <string.h>

int main() {
    char str1[100];
    char str2[100];

    do {
        printf("请输入第一个字符串:");
        gets(str1);

        printf("请输入第二个字符串:");
        gets(str2);

        // 判断是否退出循环
        if (strlen(str1) == 0 || strlen(str2) == 0) {
            break;
        }

        // 对读取到的字符串进行处理或输出
        printf("第一个字符串:%s\n", str1);
        printf("第二个字符串:%s\n", str2);

    } while (1);

    return 0;
}

在这个示例中,我们使用了do while循环来读取两个字符串,并在输入的字符串为空时退出循环。注意,由于使用了gets函数来读取字符串,可能存在缓冲区溢出的风险,建议使用更安全的函数替代,如fgets函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java 为什么不推荐 while 循环使用 sleep()

前言最近逛 CSDN 看到一篇文章,文章大意是说为什么循环中不推荐使用 sleep 操作,原因在于线程挂起和唤醒会有很大的性能消耗,并推荐使用 Timer 及 ScheduledExecutorService...可能会导致忙等待 // 如 FLAG 变量状态未改变 那么线程可能一直循环,并不断进行线程挂起和唤醒原因是否正确主要原因和原文博主所说有很大的关系但不完全正确:我们都知道 Java 线程实际对应着操作系统的一个线程...比如微服务体系,客户端上报实例状态,或者服务端检测客户端状态都会使用定时轮询的机制。...比如一些用户登录场景,当用户登录状态改变时,发送登录事件进行后续处理,比如登录通知等等等待和唤醒等待和唤醒机制一般适用于等待时间较长的场景,因为等待和唤醒是一个性能消耗比较大的操作;等待时间不是很长的场景可以使用轮询机制... Java AQS 等待获取锁和线程池任务为空等待新任务时,会使用等待和唤醒操作轮询机制 和 等待和唤醒 一般会结合使用,避免线程频繁的挂起和唤醒。

65530

要点3:输入函数对比与自定义输入方式

读取一行; getchar 可以读取到换行符; 常用于暂停程序,或丢弃缓冲区剩余字符; gets 读取一行,遇到换行符,直接丢弃换行符; 会自动字符串末尾添加\0; 返回字符串指针,读取失败返回null..., &seed)); } 运行程序,输入 两个整数,打印为 2,测试输入3个值仍然打印2,是因为这个"%d %d"指定了只解析两个int,多余的将留在缓冲区,如果后面再写一个scanf,将从缓冲区中继续解析...因为无法解析的值会继续留在缓冲区供下次使用,所以如果是循环scanf,程序就会跑飞,让你没有输入的机会,可以使用综上一节提供的示例测试一下,运行后直接输入f。...getchar 这个函数可以从输入缓冲区仅读取一个字符,返回int,后面结合fgets使用gets读取字符串时,scanf()和转换说明%s只能读取一个单词,可是程序中经常要读取一整行输入。...fgets 这个函数除了可以从标准输入读取字符串之外,还可以从文件读取,而且可以指定读取字符个数,比gets_s更加灵活易用,利用fgets,但是fgets不会自动丢弃超过字符个数之外的行缓冲区数据,

75440

C语言字符串IO

因此C11委员会在标准废除了gets()函数。 gets()函数的替代品 过去常使用fgets函数来代替gets函数,输入处理方面与gets函数略有不同。...然后while循环进入了下一轮迭代,fgets函数继续从输入的剩余读入数据,一直循环,直到读到tion\n,fgets函数将其存储为tion\n\0,fputs函数打印该字符,并且由于\n进行换行。...(如上面的案例) 坏处:是有时候我们并不想把换行符存储字符串,这样的换行符会带来一些麻烦。 如何处理掉换行符? while(words[i] !...如果输入太长,使用gets()不安全,它会擦写现有的程序,存在安全隐患,但是使用gets_s()函数很安全,但是由上面可知超出限定后gets_s()函数可能会中止或者退出程序,所以要知道如何编写特殊的“...scanf()函数 使用scanf()和%s转换说明读取字符串。scanf()和gets()或者fgets()的区别在于它们如何缺点字符串的末尾。

4.5K10

【C语言】学生管理系统

\n"); system("pause"); } 该函数通过控制n,m的大小来控制do while实现添加到目标人数。函数运行结束后也对实时人数进行更新。...,使gets正确读取 gets(name); while (1) { flag = 0; for (i = 0; i < n; i++) { if (strcmp(name,...然后进入一个无限循环 while (1),这个循环会一直运行直到用户选择退出子菜单。 循环内部,首先通过一个 for 循环遍历学生数组 stu,查找是否有与用户输入的姓名匹配的学生。...使用一个 for 循环遍历一个预定义的最大学生人数 N,每次循环使用 fread() 函数从文件读取一个 struct student 结构体的数据,如果成功读取到了数据,则将 k 的值加一,以记录学生人数...\n"); system("pause"); } } 该代码控制退出程序,如果确认退出,则设置全局变量 t 的值为 0,以终止 main 函数while 循环,并显示相应的提示信息

18510

这几道C语言题涉及你的知识盲区?

sizeof(buff)); gets(buff); //gets不检查输入的字符串大小,可能造成缓存溢出 printf("\n The buffer entered is [%s]...\n", buff); return 0; } 答:上面代码里的问题在于函数 gets() 的使用,这个函数从 stdin 接收一个字符串而不检查它所复制的缓存的容积,这可能会导致缓存溢出。...程序结束后,所有这个程序分配的内存都会自动被处理掉。但如果上面的代码处于一个 “while循环,那将会导致严重的内存泄漏问题!...当输入 “zebra” 时,while 循环会在执行前被终止,因此传给 free() 的变量就是传给 malloc() 的地址。...5.使用_exit退出 问:在下面的代码,atexit() 并没有被调用,为什么?

59620

Shell 编程核心技术《二》

还可以使用 seq 1 10,它们是等价的。 2 变量类型 Shell 是不区分变量类型的,这一点和 Python 很像,所有的变量都是基础类型,只在运行时做动态解析。...首先来看下算数判断,通常算数判断可以用来比较两个变量间的关系,比如两个数字的大小比较,字符串的匹配关系,等等。 除了简单的条件判断之外,Shell 还支持复杂的与、或、非逻辑判断。...例如:输入 for i in (seq 1 3 10) 指令,然后 do 语句块打印 echo i 的值,do 语句块以 done 结束。...7 while 循环 最后是 while 循环,和 for 循环很像,while 首先判断条件,条件成立则在 do 语句块执行操作。...而 while 还有一个很常用的功能,就是通过 while read line 循环读取文件的每一行。

62020

shell循环语句

使用ping命令检测各主机的连通性 1.1、for循环读取文件 for i in `cat 文件名` 1.2、示例:生成随机密码 脚本自动生成一个8位随机密码,大小英文字母和数字 字符串长度 $...循环 语法: while 条件测试 do 命令序列 done 2.1、while循环读取文件 法一 #line 为变量名 while read line #读取每行文件 do echo $line...#输出每行 done < 文件名 #文件名交给while 法二 cat 文件名 | while read line #读取每行文件 do echo $line.../bin/bash num=$[$RANDOM % 1000] #a用于方便退出while循环 a=0 #b用于统计猜测次数 b=0 while [ $a -eq 0 ] do read -p...break跳出单层循环,break 2跳出2层循环 5.3、continue 终止某次循环的执行,但是不会完全终止整个循环 while until循环使用需要谨慎,因为continue

60210

Java学习笔记3-程序控制

,常用占位符如下表,注意%表示占位符,要输出%则需要使用两个连续%%: 占位符说明%d格式化输出整数%x格式化输出十六进制整数%f格式化输出浮点数%e格式化输出科学计数法表示的浮点数%s格式化字符串 if...break; default: break; } 其中,option的数据类型可以必须是 整形、字符串或枚举型 类型,PS:千万不要忘了break和default; while & do while...循环 while:即让计算机根据条件做循环计算,满足条件时继续循环,条件不满足时退出循环。...每次循环前,先判断条件是否成立,成立则执行循环体内语句,否则直接跳出循环while(condition) { // 循环语句 } // 继续执行后续代码 do...while:先执行循环,...再判断条件,条件满足则继续循环,不满足时退出循环,至少会循环一次; do{ // 执行循环语句 } while(condition); for循环 利用计数器实现循环,先初始化计数器,然后每次循环前检测循环条件

48920

C#网络编程(同步传输字符串) - Part.2

这段代码有个地方需要注意:能够读取字符串的总字节数大于BufferSize的时候会出现字符串截断现象,因为缓存的数目总是有限的,而对于大对象,比如说图片或者其它文件来说,则必须采用“分次读取然后转存...()方法放入到do/while循环中。...如果使用一个do/while循环,并将listener.AcceptTcpClient()方法放在循环之外,将TcpClient.GetStream().Read()方法放在循环以内,那么服务端可以处理一个客户端的多条请求...如果使用两个do/while循环,对它们进行分别嵌套,那么结果是什么呢?结果并不是可以处理多个客户端的多条请求。...主线程,也就是执行外层do/while循环的线程,收到一个TcpClient之后,必须将里层的do/while循环交给新线程去执行,然后主线程快速地重新回到listener.AcceptTcpClient

85330

经典C面试题

()的使用,这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积,这可能会导致缓存溢出。...程序结束后,全部这个程序分配的内存都会自己主动被处理掉。但假设上面的代码处于一个“while循环,那将会导致严重的内存泄漏问题!...当输入“zebra”时,while循环会在运行前被终止,因此传给free()的变量就是传给malloc()的地址。...6.使用_exit退出 问:以下的代码,atexit()并没有被调用,为什么?...由于本地变量的生命周期就是“inc()”的生命周期,所以inc结束后,使用本地变量会发生不好的结果。这能够通过将main()变量“a”的地址来避免,这样以后还能够改动这个地址存储的值。

67910

经典C语言面试题

答:上面代码里的问题在于函数gets()的使用,这个函数从stdin接收一个字符串而不检查它所复制的缓存的容积,这可能会导致缓存溢出。...程序结束后,所有这个程序分配的内存都会自动被处理掉。但如果上面的代码处于一个“while循环,那将会导致严重的内存泄漏问题!...当输入“zebra”时,while循环会在执行前 被终止,因此传给free()的变量就是传给malloc()的地址。...6.使用_exit退出 问:在下面的代码,atexit()并没有被调用,为什么?...因为本地变量的生命周期就是 “inc()”的生命周期,所以inc结束后,使用本地变量会发生不好的结果。这可以通过将main()变量“a”的地址来避免,这样以后还可以修改 这个地址存储的值。

2.8K50

【C语言】题集 of ⑧

循环一共有 for 和 while 循环两种通常我们都是会采用 for 循环来解决这道题目的。因为,for 循环的效率实际上会比 while 的效率好。注:指代不同的场合当中哟。...第四十题零→任意输入字符串实现逆序打印,不能使用C自带的字符串库函数 首先,我们创建一个函数来实现字符串当中的逆序打印,题目规定不能使用字符串当中库函数,那么本题目很有可能是会使用的但是不让我们去使用的库函数字符串函数...输入函数这里推荐大家去使用 gets() 函数,那我们来说说 gets() 输入函数 和 scanf() 输入函数的区别吧↓ scanf():不能接受空格、制表符Tab、回车等; 当遇到回车,空格和tab...键会自动字符串后面添加'\0',但是回车,空格和tab键仍会留在输入的缓冲区。...gets(): 能够接受空格、制表符Tab和回车等; 可接受回车键之前输入的所有字符,并用'\n'替代 '\0'.回车键不会留在输入缓冲区 ,用到读取字符串,用回车结束输入。

49720

C++快速补天

转义字符\0表示空字符(不是空格) C语言中使用布尔型需要添加头文件stdbool.h 非0都会转换为true(-1和1都是true) #define pi 3.14 //可以直接用pi,不用定义变量...n)//省略了“==0”,实际意思为while(n==0) for循环中需要注意C语言括号不允许初始化变量,而C++可以。...break & continue:退出当次循环(while,do..while,for) 和 退出当次轮回,继续下次轮回。 定义长度为size的一维数组,只能访问0~size-1的元素。...puts/printf就是通过识别\0来作为字符串结尾,正因为如此,应该在除了scanf的%s和gets函数之外,如getchar和scanf的%c,输入的每个字符串后加入\0。...(究仔细来就是数组第一个\0前的字符个数) strcmp(a,b):按字典序比较两个字符串大小。(数组a<数组b,则返回一个负整数) strcat(a,b):把b接到a后面。

54120

最通俗易懂地讲解scanf、gets和getchar的区别

3、实例 总结一下两个函数的使用: ==输入完成后:== ==scanf 把数据一把全梭了;== ==getchar 把数据一个一个从兜里掏。...== 很多时候会出现这样一种情况,即先输入了一个 scanf 的语句,然后可能要用到 gets ,这个时候上一个 scanf 留下的 回车 就会打搅乱下面的数据读取!!!...scanf 输入的书的数量3,留下了一个 回车,如果在这里直接接着使用一个 scanf 的话,就会出错: 因为 回车 会留在缓存流,并被下一个函数 get 读取到,从而扰乱了本来的数据读取,继而出现了非预期结果...不过,无论是对待字符还是字符串,scanf 的处理都是比较相似的,这一点倒是比较容易学习和使用,但是 来自 pudn,只有一段开头话: 中文版本:在数据大量的情况下,用 gets 读取快于 scanf(...回车,回车 会留在缓冲区gets 读取以任何字符开头的字符串读取字符串包括 空格 但是不包括 回车,以 回车 结束输入,接收 空格 和 回车,但之后会丢弃 回车 并以 \0 代替; 最后的一个图给出常用的

4.8K31
领券