C/C++中读取输入数据时的'\n'问题

在C中,使用scanf输入的数据实际是先将数据加载到stdin中,然后从stdin中将数据取出到scanf的地址中,但是实际的输入最后会有一个'\n',从stdin中取出数据时这个字符将会留在stdin中,如果此时我们继续使用scanf不会出现什么问题,但是使用支持空格的gets(),将会从stdin中取出最后一个'\n',gets()可能读取不到数据。

在C中有一个stdin stdout刷新的函数,貌似fflush()。使用这一函数清空stdin中的数据就可以了。

在C++中getline()相当于上文的gets(),它将从标准输入中取出字符,其中的'\n'也会替代你所需要的字符,可以在此函数之前加入cin.get()清除标准输入之中的数据。

转载于:https://www.cnblogs.com/putong/archive/2012/02/18/2356933.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: #include<stdio.h> int main(){ int n; printf("请输入读取数据:"); scanf("%d",&n); printf("您输入数据是:%d",n); return 0; } ### 回答2: 使用C语言编写一个快速读取输入数据的代码,可以使用fgets函数来实现。fgets函数是C语言用于从输入读取一行数据的函数。 下面是一个示例代码: ```c #include <stdio.h> #define MAX_SIZE 100 // 定义最大输入字符数 int main() { char input[MAX_SIZE]; // 定义存储输入数据的字符数组 printf("请输入数据:\n"); fgets(input, sizeof(input), stdin); // 使用fgets函数从标准输入读取一行数据 printf("您输入数据是:%s", input); return 0; } ``` 这段代码首先定义了一个字符数组`input`,用于存储输入数据。然后使用`printf`函数输出提示信息,要求用户输入数据。接下来使用`fgets`函数从标准输入(即键盘)读取一行数据,并将其存储到`input`数组。最后,使用`printf`函数输出用户输入数据。 这个代码片段实现了快速读取输入数据的功能,且适用于大部分文本输入数据的情况。注意,`fgets`函数会将输入的换行符也一同读取进来,如果不需要换行符,可以使用`strtok`函数或手动处理字符串来去除换行符。 ### 回答3: 使用C语言编写一个快速读取输入数据的代码可以采用以下方法: #include <stdio.h> #include <stdlib.h> // 定义一个函数用于快速读取输入数据 int fastInput() { static char buffer[1 << 16]; // 定义一个缓冲区,用于存储输入 static int pos = 0; // 当前读取的位置 static int count = 0; // 缓冲区的字符数量 // 如果当前位置已经读取完,进行新的读取操作 if (pos >= count) { count = fread(buffer, 1, sizeof(buffer), stdin); // 从标准输入读取数据 pos = 0; // 重置当前位置 } // 返回读取数据 return buffer[pos++]; } int main() { int num = fastInput(); // 调用快速读取函数读取一个整数 printf("输入数据是:%d\n", num); return 0; } 在上述代码,快速读取函数fastInput()使用了一个静态字符缓冲区buffer来存储输入数据,采用fread()函数从标准输入流(stdin)读取数据。每次调用fastInput()函数,它会从缓冲区读取一个字符并返回。如果缓冲区未读取完,则直接返回缓冲区的字符,否则会重新从输入读取数据填充缓冲区。 在主函数,我们调用fastInput()函数读取一个整数,并将其打印输出。可以根据需要修改函数和主函数的代码来适应更多类型的输入数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值