首页 > 其他分享 >关于C语言输入输出的逗号问题(小细节)

关于C语言输入输出的逗号问题(小细节)

时间:2023-08-11 21:32:01浏览次数:29  
标签:空格 int scanf 输入输出 C语言 逗号 printf 我们 输入


C语言的输入输出必须要遵循scanf和printf的格式,就是你是什么格式你就要输入什么。

一、输入问题

#include <stdio.h>
int main()
{  	int a,b;
    scanf("%d,%d",&a,&b);
	printf("a+b=%d",a+b);
    return 0;
}

关于C语言输入输出的逗号问题(小细节)_#include

关于C语言输入输出的逗号问题(小细节)_输入输出_02

关于C语言输入输出的逗号问题(小细节)_#include_03编辑

 这个程序我们可以看到它运行的结果是错误的!为什么呢,因为我们在scanf中已经指定了输入格式,输入格式是两个数中间用逗号隔开,所以我们输入时也必须在输入的两个数之间加逗号隔开,我们再次输入试一下

关于C语言输入输出的逗号问题(小细节)_输入输出_04

关于C语言输入输出的逗号问题(小细节)_赋值_05编辑

这样就对了!哪假如把逗号改成别的字符,还需要输入别的字符吗?

#include <stdio.h>
int main()
{  	int a,b;
    scanf("%d+%d",&a,&b);
	printf("a+b=%d",a+b);
    return 0;
}

关于C语言输入输出的逗号问题(小细节)_输入输出_06

 我们把","改成了"+",我们再试试直接用空格隔开两个数,看看结果对吗?

关于C语言输入输出的逗号问题(小细节)_输入输出_07

关于C语言输入输出的逗号问题(小细节)_输入输出_08编辑

 答案是错的,那我们在输入的两个数之间加入逗号呢?

关于C语言输入输出的逗号问题(小细节)_输入输出_09

关于C语言输入输出的逗号问题(小细节)_赋值_10编辑

答案还是错的,最后我们试着也在输入的时候在两个数之间加入"+"。

关于C语言输入输出的逗号问题(小细节)_#include_11

关于C语言输入输出的逗号问题(小细节)_赋值_12编辑

哇哦!答案终于对了!所以我们可以得出一个结论就是scanf中的输入格式是什么样的,我们输入时也就必须和其中格式完全一致,否则就会出现读取错误。 

我们平时的输入一般以空格隔开,一般不会以逗号隔开,所以我们将程序改成我们日常习惯的输入然后再试试结果。

#include <stdio.h>
int main()
{  	int a,b;
    scanf("%d %d",&a,&b);
	printf("a+b=%d",a+b);
    return 0;
}

关于C语言输入输出的逗号问题(小细节)_输入输出_13

我们将程序改成这样,我们再输入试试。

关于C语言输入输出的逗号问题(小细节)_输入输出_14

关于C语言输入输出的逗号问题(小细节)_赋值_15编辑

没问题了!那我们要是把scanf中的空格去掉呢?

#include <stdio.h>
int main()
{  	int a,b;
    scanf("%d%d",&a,&b);
	printf("a+b=%d",a+b);
    return 0;
}

关于C语言输入输出的逗号问题(小细节)_输入输出_16

我们把程序改成这样,按理是不是我们输入的时候不用空格直接连着输入两个数呢?不!如果你输入三位数,这样程序怎么知道你是把前两位赋值给了a,还是把前1位赋值给了a呢?这样会造成歧义,所以如果scanf中两个%d之间什么也不加就是默认空格隔开了,我们再试一下程序看看!

关于C语言输入输出的逗号问题(小细节)_#include_17

关于C语言输入输出的逗号问题(小细节)_赋值_18编辑

好的!没有问题!这样我们就搞清了输入格式。 

 二、输出问题

先看这样一个程序,猜猜它的输出是什么。

#include <stdio.h>
int main()
{  	int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
	printf("a=%d,b=%d,c=%d",a,b,c);
    return 0;
}

关于C语言输入输出的逗号问题(小细节)_输入输出_19

你猜对了吗?

关于C语言输入输出的逗号问题(小细节)_#include_20

关于C语言输入输出的逗号问题(小细节)_输入输出_21编辑

有了上面输入问题的铺垫相信大家都可以很快明白为什么是这样输出了。 

那我们再试着去掉逗号看看,把程序改成这样。

#include <stdio.h>
int main()
{  	int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
	printf("a=%db=%dc=%d",a,b,c);
    return 0;
}

关于C语言输入输出的逗号问题(小细节)_赋值_22

输出自然也是紧挨的。

关于C语言输入输出的逗号问题(小细节)_输入输出_23

关于C语言输入输出的逗号问题(小细节)_#include_24编辑

那我们如果在之间加上空格呢?把程序修改成下面这样。

#include <stdio.h>
int main()
{  	int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
	printf("a=%d b=%d c=%d",a,b,c);
    return 0;
}

关于C语言输入输出的逗号问题(小细节)_输入输出_25

看看输出

关于C语言输入输出的逗号问题(小细节)_输入输出_26

关于C语言输入输出的逗号问题(小细节)_#include_27编辑

哇哦!输出之间也有了空格,所以我们可以得出结论:输入scanf下的%d之间,因为输入歧义性问题有空格和无空格实际上是一样的,而输出的printf下的%d之间,如果有空格就输出空格,如果没有就不输出。 

总结

总之,无论输入与输出,都遵循着一定的格式,我们必须严格按照我们自己所规定的格式进行输入输出,否则就会造成不小的麻烦。细节决定成败,态度决定高度。让我们一起加油!


标签:空格,int,scanf,输入输出,C语言,逗号,printf,我们,输入
From: https://blog.51cto.com/u_15720469/7053171

相关文章

  • C语言里.和->的区别
    ->使用一个指向结构体或对象的指针访问其内成员.是直接通过结构体或对象来访问他们的内部成员变量 早期的C语言不支持将结构体作为参数在函数之间传递,只能用指向结构的指针在函数间进行传递  a->b的含义是(*a).b,所以他们是不同的,不过的确->可以用*和.实......
  • 批量将n行数据用双引号括起来并用逗号连接成一行数据
    1、我们要达到的效果:批量将n行数据转换成格式"xxx","xxx","xxx"如批量将下面3行转换成格式"40000007","40000008","40000362",行数少的时候可以一个个修改,但是行数一多就无法快速更改。下面将介绍一个方法只需2步(替换、首末补充)完成批量转换n行 2、以下将用到文本工具Notepad+......
  • 【C语言基础语法】2. 变量和数据类型
    目录一、变量和常量 1.1关键字 1.2数据类型 1.3变量名命名二、进制三、整型 3.1整型的输出 3.2整型的输入 3.3整型的分类四、字符 4.1字符的输出 4.2字符的输入 4.3ascill码表 4.4转义字符五、浮点型六、类型限定符七、格式化 7.1格式化输出 7.......
  • C语言个人笔记(持续更新中)
    第一&二章概况1在UNIX、LINUX和Windows下的运行过程c语言执行过程:源代码.c--->(编译器/汇编器)--->目标代码.obj--->(链接器)--->可执行代码.exe编译器:将c文件编译为汇编语言汇编器:将c文件编译为机器语言链接器:有三种链接方式:在UNIX系统上编译不具备专门的C语言编译器,通常......
  • C++之输入输出流(控制台打印/读取数据)
    C++与流stream相关的头文件/库iostreamfstreamsstream分别对应:控制台IO流/文件流/字符串流,本文主要介绍控制台输出输出流cin>>空格分隔cout<<控制台输出已知待读取元素的数量:cin>>n未知待读取元素的数量:while(cin>>val)另外,可以整行读取数据,然后再解析字......
  • C语言的指针
    所谓的指针,其实就是一个类型。如何解释这个呢?首先来看inti=3;int是变量的类型i是变量的名字3是变量的值首先变量是存储在内存中,访问内存是需要地址,其次读取时需要知道内存存储的格式后才知道读取多少位内存。也是分三步走确认内存地址知道内存格式读取内存此......
  • C语言驱动开发之内核解锁与强删文件
    在某些时候我们的系统中会出现一些无法被正常删除的文件,如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉,而所谓的解锁其实就是释放掉文件描述符(句柄表)占用,文件解锁的核心原理是通过调用ObSetHandleAttributes函数将特定句柄设置为可关闭状态,然后在调用ZwClose将其文件关闭......
  • 萌新学习c语言过程
    今天把三子棋的代码写的差不多了,有些地方不尽人意感觉有时候还是有点迷。......
  • C语言驱动开发之内核解锁与强删文件
    在某些时候我们的系统中会出现一些无法被正常删除的文件,如果想要强制删除则需要在驱动层面对其进行解锁后才可删掉,而所谓的解锁其实就是释放掉文件描述符(句柄表)占用,文件解锁的核心原理是通过调用ObSetHandleAttributes函数将特定句柄设置为可关闭状态,然后在调用ZwClose将其文件关闭......
  • 我的第十三次C语言练习
    //intmain(void)//{// charname1[40];// charname2[40];// printf("Mynameis");// scanf("%s%s",name1,name2);//MynameisAngelaPlains// printf("Hello%s%s",name1,name2);// HelloAngelaPlains// return0;//}今天先是......