首页 > 其他分享 >scanf高级用法&不要忘记清除缓冲区的换行符号

scanf高级用法&不要忘记清除缓冲区的换行符号

时间:2022-12-23 06:33:05浏览次数:61  
标签:include int scanf Programming long char 缓冲区 换行符

题目详情 - 7-4 查找书籍 (pintia.cn)

  给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

输入格式

  输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。

3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0

输出格式

25.00, Programming in Delphi
18.50, Programming in VB

核心问题

  如何读取含有空格的字符串

解决方法

  使用scanf函数的高级用法

 scanf("%[^\n]",s[i]);
 getchar();
 scanf("%lf",&jia);
 getchar();  
 //需要注意的是一定要清除缓冲区的换行字符啊

AC代码

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
// #pragma GCC optimize(1)
// #pragma GCC optimize(2)
// #pragma GCC optimize(3,"ofast","inline")
#define ifor(i, l, r) for (int i = l; i <= r; ++i)
#define rfor(i, r, l) for (int i = r; i >= l; --i)
#define _SILENCE_CXX20_CISO646_REMOED_WARNING
typedef unsigned long long ull;
typedef long double doubleL;
typedef long long ll;
const long long N = 2e+5;
char a[1000][10000];

typedef struct stu
{
    char a[100];
    char b[100];
    int grade;
} stu;
int main(int args, char *argv[])
{
    int n;
    scanf("%d", &n);
    getchar();                                   //一定要注意清楚换行符号,不然打死这个题都要错
    char s[100][100];
    double jia,xiao=35125,da=-413;
    int p1,p2;
    for(int i=1;i<=n;i++)
    {
        scanf("%[^\n]",s[i]);
        getchar();
        scanf("%lf",&jia);
        getchar();
        
        if(n==1)
        {
            printf("%.2lf, %s\n",jia,s[i]);
            printf("%.2lf, %s",jia,s[i]);
            return 0;
        }
        if(jia<xiao)
        {
            xiao=jia;
            p1=i;
        }
        if(jia>da)
        {
            da=jia;
            p2=i;
        }
    }
    printf("%.2f, %s\n",da,s[p2]);
    printf("%.2f, %s",xiao,s[p1]);
    return 0;
}

标签:include,int,scanf,Programming,long,char,缓冲区,换行符
From: https://www.cnblogs.com/Archer-lian/p/16999895.html

相关文章

  • printf()和scanf()的*修飾符
    如果你不想預先設置字段的寬度,想通過程序來進行設定,則可以可以使用“*”來進行修飾字段的寬度,前提是在程序中要包含“*”和參數對應的值(比如%*d,那麽參數應該包含*和%d的值)......
  • 關於scanf()的使用
    要使用scanf函數進行輸入:1.如果用scanf()要輸入讀取基本變量的值,需要加&。2.如果用scanf()讀取的是把字符串讀入字符數組中,則不需要加&1#include<stdio.h>2in......
  • fprintf()\fscanf()\sprintf() 函数的灵活应用
     fprintf函数和fscanf函数调用方式:fprintf(文件结构指针,格式字符串,输出表列)fscanf(文件结构指针,格式字符串,输出表列) voidmain(){   FILE*pWrite,*pRead; ......
  • 实验七-缓冲区溢出
    2022-2023-120221304实验七-缓冲区溢出实验指导书内容实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变......
  • 实验七-缓冲区溢出
    实验七-缓冲区溢出 实验指导书内容一、实验简介   缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的......
  • OS_用户层的IO软件@缓冲区@磁盘高速缓存@异步IO
    文章目录​​PC_OS@磁盘HDD_SSD@存储介质(材料工艺)@性能指标@磁盘调度算法​​​​外存​​​​磁盘存储器​​​​组成​​​​磁盘驱动器​​​​磁盘控制器​​​​盘片......
  • 实验七-缓冲区溢出 实验报告
    实验七-缓冲区溢出实验报告实验指导书内容一、准备:输入命令安装一些用于编译32位C程序的软件包二、实验步骤:1、初始设置:(1)关闭地址空间随机化(2)设置zsh程序,关闭......
  • printf的输出缓冲区问题:\n不加就发不出来
    (29条消息)linux下printf函数为什么不加\n就不能输出相关的内容?_zqx20032009的博客-CSDN博客 fflush(stdout);//刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输......
  • 实验七-缓冲区溢出
    实验指导书内容一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。......
  • 实验七-缓冲区溢出
    实验指导书内容一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段......