C语言中的多行输入问题及说明

目录
  • 一、未明确具体输入行数
    • 1、~scanf方式
    • 2、EOF
    • 3、根据输入元素的个数
  • 二、已知具体输入行数
  • 总结

牛客网和LeetCode的竞赛题中经常会遇到多行输入,以前不熟悉这种写程序的方式,初次接触时输入值会有很多问题。

多行输入有下面这些常用方法:

一、未明确具体输入行数

没有确定的输入行数时,一般要采用Ctrl+Z结束输入,系统会自动输入这些,我们要做的是设置好循环条件即可。

具体是每次输入都产生结果还是所有输入完以后再输出结果要看题目要求。

如:输入多个字符串,保存在二维数组中,可以采用以下两种方式:

1、~scanf方式

   char str[10][10];//定义二维数组,保存多个字符串
    int i = 0;
    while (~scanf("%s", str[i]))
    {
        i++;
    }

这里每次敲下回车会结束一次输入,循环进行一轮。

scanf函数的返回值为正确输入的值的个数,如过没有正确输入,scanf返回值即为-1,对-1按位取反值为0,用于退出循环。

Windows平台,用Ctrl+Z来表示输入结束,有些编译器需要连续按两次或者三次Ctrl+Z,且每次都在行首。

2、EOF

End of file,文件结束符

char str[10][10];//定义二维数组,保存多个字符串
    int i = 0;
    while (scanf("%s", str[i])!=EOF)
    {
        i++;
    }

3、根据输入元素的个数

char str[10][10];//定义二维数组,保存多个字符串
    int i = 0;
    while (scanf("%s", str[i])==1)//表示输入一个元素时,循环进行
    {
        i++;
    }

这里的’1’代表的是要输入的元素的个数,如果输入元素个数不为1则循环结束。

二、已知具体输入行数

知道输入行数时,循环条件设为具体行数即可

  char str1[10][10];//定义二维数组,保存多个字符串
        int num = 10;
        int i = 0;
    while (num--)
    {
        scanf("%s", &str1[i]);
        i++;
    }

ps:

上面的输入都是针对字符串来说的,而对于整型或浮点型数据来说,除了"\n"即回车以外,空格隔开也会自动结束一个数据的输入。

造成这种区别的根本原因就是字符类型中原本就会有空格符,不能作为输入结束的标志,而整型和浮点型可以。

int N = 0;
    scanf("%d", &N);
    for (int i = 1; i <= N; i++)
    {
        scanf("%d %d %d", &first[i], &second[i], &third[i]);
        printf("%d %d %d", first[i], second[i], third[i]);
    }

输入和输出:

无论使用空格还是换行符隔开,都不影响最终的结果。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C语言在输入输出时遇到的常见问题总结

    目录 一.前言 二.取整的方法 (1)使用 int 强制转换 (2)使用floor函数向下取整 (3)使用ceil函数向上取整 三.数值四舍五入 (1)使用round函数进行四舍五入 (2)使用rint函数进行四舍五入 (3)重点应用 四.在C中输出%d.%0xd.%-xd的输出格式 五.除法:余除 % .整除  / 五.连续输出 一.前言 大家好,我是一个初学C语言的小菜狗,是否大家在平时的做题中会遇到和我一样的烦恼,题目的代码已经基本完成,但是在输出时候,总是和题目给出的样例输出格式不同 ,

  • C语言使用scanf连续输入字符串出现的问题

    #include<stdio.h> int main() { char a,b; scanf("%c",&a): scanf("%c",&b); printf("%c,%c",a,b); } 一段看上去很简单的代码,即使是C语言初学者也能看懂. 可是在运行的时候却出现了问题: ①输入a后按下回车 ②用空格隔开之后再按下回车 相信和我一样的大部分初学者,看着自己天衣无缝的代码,百思不得其解. 让我们先来看看,在百度百科中

  • C语言编程中统计输入的行数以及单词个数的方法

    统计输入的行数 标准库保证输入文本流以行序列的形式出现,每一行均以换行符结束.因此,统计行数等价于统计换行符的个数. #include <stdio.h> /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == '\n') ++nl; printf("%d\n", nl); } 在该程序中,while 循环语句的循环体是一个 if 语句,它控

  • C语言中的多行输入问题及说明

    目录 一.未明确具体输入行数 1.~scanf方式 2.EOF 3.根据输入元素的个数 二.已知具体输入行数 总结 牛客网和LeetCode的竞赛题中经常会遇到多行输入,以前不熟悉这种写程序的方式,初次接触时输入值会有很多问题. 多行输入有下面这些常用方法: 一.未明确具体输入行数 没有确定的输入行数时,一般要采用Ctrl+Z结束输入,系统会自动输入这些,我们要做的是设置好循环条件即可. 具体是每次输入都产生结果还是所有输入完以后再输出结果要看题目要求. 如:输入多个字符串,保存在二维数组中,可

  • 解决C语言中使用scanf连续输入两个字符类型的问题

    昨天用C编程,遇到一个关于scanf的细节问题,假如运行如下程序: #include<stdio.h> int main() { char ch1,ch2; printf("Input for ch1:/n"); scanf("%c",&ch1); printf("ch1=%c/n",ch1); printf("Input for ch2:/n"); scanf("%c",&ch

  • C语言中输入输出流与缓冲区的深入讲解

    前言 缓冲区 又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区. 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区. 原理介绍: 当调用输入函数scanf()时,输入函数会将我们输入的数字输入到输入缓冲区, 而当我们的输入缓冲区有内容时,再次输入将不会被执行, 而是直接跳过执行,将输入缓冲区的内容赋给变量; 1.为什么要引入缓冲区 例如,我们从磁盘里取信息,我们先把读出的数据放在缓

  • linux下c语言中隐藏进程命令行参数(例如输入密码等高危操作)

    前言 启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了. 因此很有必要研究如何隐藏命令行参数中的某些字段,当然做成配置文件也是极好的,但是无疑给运行程序增加额外操作.编辑保存配置文件也会费点事. 我结合网上找到的一些方案,以及自己总结一个方案,记下笔记. 复写argv参数 该方案只在Linux下的C语言中验证成功,因为window下都是win32api获取命令行参数,但是没有设置这个,估计window不支持这种骚操作

  • Go语言中使用urfave/cli命令行框架

    命令行参数处理以及urfave/cli使用 1.通过Os.Args获取cli的参数 package main import ( "fmt" "os" ) func main() { if(len(os.Args) > 1) { for _,value := range os.Args{ fmt.Printf( "%v\n",value) } return } fmt.Printf( "%s","没输入参数&qu

  • 在C语言中输入中文字符串讲解

    C语言中的字符串是以ASCII码表的形式存入的,输入英文字符是以英文字符对应的ASCII码的形式进入寄存器中的,例如输出hello world!: 将c反汇编得到, 可以看到h的ASCII码是68,e的ASCII码是65等等存放进内存的,那中文字呢?中文字并没有对应的ASCII码,还可以显示出来吗? 答案当然是肯定的,在计算机中存储中文使用的编码规则是GB2312或GB2312-80,规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,这样我们就可以组合

  • Java中Scanner使用方式:单行/多行输入

    目录 问题 最好解决的情况 单行输入多个参数 多行输入多个参数,每行参数个数不定 问题 解决这种情况下的Scanner输入:单行,多行,数值,字符串 平时写程序一般不用Scanner,线上笔试的时候,各大公司热衷于Scanner输入. 平时用LeetCode刷题也不会用到,结果多次在笔试时候卡在Scanner,特来总结一波. 最好解决的情况 多行输入元素,其中第一行几个数字表示下面几行的个数. 以三行输入为例,第一行输入两个数字m,n,分别表示数组num1和num2的长度,第二行和第三行输入nu

  • C语言中基础小问题详细介绍

    1.printf格式输出函数 如果格式控制说明项数多于输出表列个数,则会输出错误数据:如果输出表列个数多于格式控制说明数,则多出数不被输出.%md,m指的是输出字段的宽度.如果输出字段位数小于m,则左端以空格补齐,若大于m,则按照实际位数输出.%-md,基本同上,只不过不同之处在于,空格在右端补齐printf参数可以是常量,变量或表达式,VC++ 6.0中采用从右向左顺序求值,从左向右输出如 复制代码 代码如下: int x = 5; printf("%4d%4d%4d", x, ++

  • C语言中的函数指针基础学习教程

    顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun2(char * p1,char * p2); C) char * fun3(char * p1,char * p2); 看看上面三个表达式分别是什么意思? C)这很容易,fun3是函数名,p1,p2是参数,其类型为char *型,函数的返回值为char *类型. B) 也很简单,与C)表达式相比,唯一不同的就是函数的

  • 深入探讨C语言中局部变量与全局变量在内存中的存放位置

    C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量.1.1局部变量局部变量也称为内部变量

随机推荐