首页 > 其他分享 >C语言如何输入一个字符串?

C语言如何输入一个字符串?

时间:2023-09-17 10:32:23浏览次数:42  
标签:scanf C语言 空格 回车 str 字符串 输入

(C语言如何输入一个字符串?)

用scanf输入字符串(有限制)

整个字符串处理

scanf()printf()函数中,%s指的就是字符串 所以我们就可以使用scanf("%s",str)printf("%s",str)从键盘处读取字符串并将字符串打印出来

代码如下:

int main()
{
	char str[10] = { 0 };
	scanf("%s", str);
	printf("%s", str);
	return 0;
}

这里要注意的一点是:在scanf函数中,后面的参数必须是一个地址,如输入一个整形变量:scamf("%d",&a),都需要进行&取地址操作 但是数组名就已经是地址了(详解请点击观看我的一篇关于数组名到底是什么的文章) 所以直接用数组名即可,不用进行取地址

如果我们输入一个连续的字符串如:abcde,这段代码会正常运行 在这里插入图片描述 然而,如果输入一个非连续,也就是中间有空格的字符串时,代码只会打印出第一个空格以前的内容 在这里插入图片描述

这是因为在键盘与scanf函数中,存在一个输入缓冲区,从键盘输入的内容会存放到这个缓冲区中 在这里插入图片描述

scanf并不会读取走空格,它只能读取走字符以及字符串 例如当从键盘输入字符串abc 123(注意abc123之间是有一个空格的),在缓冲区中如图: 在这里插入图片描述 scanf首先会将字符串abc取走,然后在abc后面有一个空格,scanf无法读取走空格,所以虽然从键盘输入abc 123,但是最后只有abc被存放在了str中 所以最后只输出了abc

总结一下scanf输入值之前的空白(空格、制表符、换行符)会被跳过,输入值之前的空白表示结束。因此,用%s格式码输入字符时,中间不能包括空白

这里注意的是:前面讲的scanf无法读取输入缓冲区中的空格甚至是回车,这里的scanf指的是scanf("%s",str),只是函数中是%s才无法读取,而如果是scanf("%c",&character),输入一个字符,对于空格和回车都是能正常输入的,这里不要弄混

所以,用scanf接受字符串是有局限性的。


逐个字符处理

前面已经讲了,用scanf接受字符串是由局限性的,当字符串中含有空格,scanf函数只能读取第一个空格以前的字符串,但是如果非要用scanf进行接受字符串,只能是逐个字符处理

代码如下:

#include<stdio.h>
int main()
{
	char ch[10]; 
	for (int i = 0; i < 10; i++)
	{
		scanf("%c", &ch[i]);
	}
	for (int i = 0; i < 10; i++)
	{
		printf("%c", ch[i]);
	}
	return 0;

这样也可以进行对于字符串的输入以及输出


用getchar()输入字符串

getchar()与scanf最大的区别就是,getchar可以读取走输入缓冲区中的空格以及回车

这里的内容我i之前有一篇文章进行了详细讲解,请点击查看

代码如下:

int main()
{
	char str[20] = { 0 };
	char ch = 0;
	while ((ch = getchar()) != '\n')
	{
		putchar(ch);
	}
	return 0;
}

用gets()输入字符串(简单快捷)

这里介绍一个新的函数gets(),此函数在头文件string.h中,使用此函数需要加头文件#include <string.h> gets函数的官方格式: char * gets ( char * str ); 在参数列表中,需要传一个字符型指针,也就是我们要输入的字符串的名(数组的名) gets()函数的主要作用就是接受从键盘输入的一个字符串 gets当遇到换行符\n或者EOF时停止,并将读取的结果存放在str指针所指字符数组中

#include <stdio.h>
#include<string.h>
int main()
{
	char str[10];
	printf("请输入字符串");
	gets(str);
	printf("请输出字符串");
	printf("%s", str);
	return 0;
}

输入带有空格的字符串也可以正常输出 在这里插入图片描述

其实还存在一个与gets函数配套的函数puts函数,用来输出字符,具体用法与printfputchar无差别

#include <stdio.h>
#include<string.h>
int main()
{
	char str[10];
	printf("请输入字符串: ");
	gets(str);
	printf("请输出字符串: ");
	puts(str);
	return 0;
}

gets函数与scanf、getchar的一些区别

在前面的scanf函数和getchar函数中,回车都需要值得注意,但是在get函数中,回车不作为读取内容,遇到回车时,系统自动用\0代替回车\n,所以输入一行字符串后按下回车,就完成了一次输入

gets函数一遇到回车就结束,并把这个回车从缓冲区中移走,这点与scanf不同,scanf是遇到回车,空格就结束,但并不会将回车、空格从缓冲区中移走

gets函数只会遇见回车时结束遇到空格、制表符都会正常读取,而scanf遇到空格、回车、制表符都会结束,getchar遇到空格、回车、制表符都正常读取


在这里插入图片描述

标签:scanf,C语言,空格,回车,str,字符串,输入
From: https://blog.51cto.com/u_16237630/7499885

相关文章

  • 字符串杂题20230916
    今天的题目没有那么难,挑一些不蛮板的题目来讲。建议不要光看,打个草稿画一下图,这个是解字符串题的关键。[POI2005]SZA-Template题目描述你打算在纸上印一串字母。为了完成这项工作,你决定刻一个印章。印章每使用一次,就会将印章上的所有字母印到纸上。同一个位置的相同字符可以......
  • C语言学习记录----函数
    1.函数是什么?数学中我们常见到函数的概念。但是你了解C语言中的函数吗?维基百科中对函数的定义:子程序在计算机科学中,子程序(英语:Subroutine,procedure,function,routine,method,subprogram,callableunit),是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完......
  • 变量and输入输出
    变量and输出概念:变量,本质上是一个装东西的盒子,而且只能装一个值一、1.变量的命名规则变量的名字由字母,数字,下划线_组成,不能以数字开头,不能以关键字命名,且区分大小写变量的定义格式:变量名=值=赋值符号==等于a=1b=2.1c='hhh'3.变量的类型str字符型int整型,float......
  • 【十分钟一个知识点】字符串
    概念今天我们要介绍一个全新的变量类型:字符串~也就是string类型在string类型的变量中,存放的是“字符”,任何内容都可以存在字符串中如:“Hansonishandsome666”就是一个字符串,其中虽然有数字“666”,但它不具有数的意义,只是一个字符字符与ASCLL码值刚刚我们提到了,string中存......
  • C++关于字符串的一些函数
    islower,isupper返回类型为int,当符合条件时返回非零值,并不一定是1,0tolower,toupper返回类型为int。isdigit判断一个字符是否是十进制数字,返回值:返回值为非零(真)表示c是十进制数字,返回值为零(假)表示c不是十进制数字。isalphaisalpha()用来判断一个字符是否为字母,如果是字符......
  • 初学者一定要了解的c语言数据类型详解来了
    @TOC前言`一、当我们要描述或者记录一些事物时,通常需要用一些数据来反映它的特征,例如:小明"男""19"岁,身高"1.88"米,在从语言中,要表示这些数据就需要设置合适的数据类型,那么c中数据有哪些类型提供给我使用呢?一、数据类型基本类型整形short//短整型int//整形l......
  • C语言实例_解析GPS源数据
    一、GPS数据格式介绍GPS(全球定位系统)数据格式常见的是NMEA0183格式,NMEA0183格式是一种用于导航设备间传输数据的标准格式,定义了一套规范,使得不同厂商的设备可以通过串行通信接口(常见的是RS-232)进行数据交换。这个标准最初由美国航海电子协会(NationalMarineElectronicsAssociat......
  • vue中elementui el-input绑定的值如何过滤掉输入的空格?
    在vue中可以在@input事件中使用Trim函数来去掉前后两端空格,再使用replace方法来删除中间空格,此时的值删除所有空格,用户输入值中的空格就会被过滤掉了。<template> <div> <el-inputv-model="searchValue"@input="handleInput"></el-input></div></template><scrip......
  • Android入门教程 | EditText 用户输入
    EditText监听回车使用EditText时,有时候我们会需要监听输入的回车,以做出一些操作。或者需要把回车变成“搜索”,“发送”或“完成”等等。EditText为我们提供了一个属性imeOptions用来替换软键盘中enter键的外观,如actionGo会使外观变成“前往”。需要同时设置android:input......
  • C语言学习——三大语法结构
    1.顺序结构C语言中的顺序结构是指程序中的语句按照从上到下的顺序依次执行,每一条语句都在前一条语句执行完毕后才执行,形成了线性的执行路径。这是C语言的基本执行方式,也是大多数编程语言的通用执行方式之一。以下是C语言顺序结构的特点:1.1从上到下执行:在C语言中,程序从main函数......