循环到第二次时scanf函数会自动获取\n,这个是为什么?

问题描述

循环到第二次时scanf函数会自动获取n,这个是为什么?

#include;
//#include
//#define PI 3.1415926
int main(void)
{
char letter=0;
while(1)
{
printf("Enter an upcase letter:");
scanf("%c",&letter);
if(letter>='A')
if(letter<='Z')
{
letter=letter-'A'+'a';
printf("You entered an uppercase %cn",letter);
}
else
printf("Try using the shift key,Bud!I want a capital letter.n");
else
printf("You didn't enter an uppercase letter.n");

};
return 0;

};

解决方案

看 MSDN 的示例,应该不存在所描述的问题。难道是回车多按了一次?

 /* SCANF.C: This program uses the scanf and wscanf functions
  * to read formatted input.
  */

#include <stdio.h>

void main( void )
{
   int   i, result;
   float fp;
   char  c, s[81];
   wchar_t wc, ws[81];

   printf( "nnEnter an int, a float, two chars and two stringsn");

   result = scanf( "%d %f %c %C %s %S", &i, &fp, &c, &wc, s, ws );
   printf( "nThe number of fields input is %dn", result );
   printf( "The contents are: %d %f %c %C %s %Sn", i, fp, c, wc, s, ws);

   wprintf( L"nnEnter an int, a float, two chars and two stringsn");

   result = wscanf( L"%d %f %hc %lc %S %ls", &i, &fp, &c, &wc, s, ws );
   wprintf( L"nThe number of fields input is %dn", result );
   wprintf( L"The contents are: %d %f %C %c %hs %sn", i, fp, c, wc, s, ws);
}
Output
Enter an int, a float, two chars and two strings
71
98.6
h
z
Byte characters

The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters

Enter an int, a float, two chars and two strings
36
92.3
y
n
Wide characters

The number of fields input is 6
The contents are: 456 92.300003 y n Wide characters

解决方案二:

全部输入打印出来对比一下

解决方案三:

好多人都会遇到这问题,因为scanf没读完所有缓存中的信息。把回车剩外面了,被下次的scanf接收到了。

时间: 2025-01-20 18:49:04

循环到第二次时scanf函数会自动获取\n,这个是为什么?的相关文章

c语言-scanf函数用%f读取double类型时,为什么会出现错误?

问题描述 scanf函数用%f读取double类型时,为什么会出现错误? 问题一: #include double power (double n,int p); int main (void) { double x,xpow; int exp; printf("Enter a number and the positive integer power"); printf("to which will be raised . enter q"); printf(&q

详解javascript replace()第二个参数为函数时的参数用法

javascript的replace()第二个参数为函数时的参数: replace()函数具有替换功能,它可以具有两个参数,第一个参数可以是要被替换的字符串或者匹配要被替换字符串的正则表达式,第二个参数可以是替换文本或者一个函数,下面看一下关于replace()函数的几个代码实例. 代码实例: 实例一: <script> varstr="I love jb51 and you?"; console.log(str.replace("jb","j

c语言scanf( )函数的一个问题

问题描述 c语言scanf( )函数的一个问题 #include int main() { int s; while(1) { printf("请输入:"); scanf("%d",&s); printf("%d ",s); } /*当给s从键盘接受字母的时候,该循环会出现不同, 原先(正常输入证书的时候)是等待你输入了s过后才 会输出结果,但现在(给s从键盘接受字母的时候)不 需要等待直接死循环下去. 我想请教各位长辈,这是什么原因导致

printf-为什么倒数第四行又用了一次scanf()函数? 上面不是已经有scanf函数了吗?

问题描述 为什么倒数第四行又用了一次scanf()函数? 上面不是已经有scanf函数了吗? int zm=0sz=0qt=0;char c;scanf(""%c""&c);while(c!='n'){ if(c>='0'&& c <='9') sz++; else if((c>='A' && c<='Z') || (c>='a' && c<='z')) zm++; else

c语言问题-scanf函数输入问题

问题描述 scanf函数输入问题 为什么在scanf()函数中要输入多个转换说明符时,中间要加个空格,例如scanf("%s %s"......) 解决方案 不加空格怎么区分呢?比如 %s%s,你输入123,到底是12 3还是1 23或者是1 2,3忽略呢 解决方案二: 你如果想直接输入八进制,不得告诉计算机你的格式啊 解决方案三: %s这种接受字符串的操作尽量只写一个,其它的类型接受可以多写. 解决方案四: scanf函数里面的空格是没必要加的吧,运行的时自己输入需要加空格区分两个数

详解C语言中scanf函数使用的一些注意点_C 语言

 (一)基本介绍 Scanf是系统自带的函数,声明包含在stdio.h文件中,因此要是有该函数,必须加载#include<stdio.h>头文件.当执行到scanf函数时,程序就暂停等待用户输入,该函数只接受变量的地址,格式为&变量名.是一个阻塞式的函数,2用户输入完毕后,则将值赋值给变量,至此函数调用完毕.敲回车键告知计算机键入完毕. (二)使用注意 ①. 使用scanf函数输入一个字符变量.Char a; scanf("%c",&a); ②. 同时输入多

关于char a,b,c,%d,%c%d分两次用scanf函数输入,却清零了第一次的数值问题

问题描述 关于char a,b,c,%d,%c%d分两次用scanf函数输入,却清零了第一次的数值问题 #include #include main() { unsigned char a,b,c; scanf("%d",&a); printf("%dn",a); getchar(); printf("%dn",a); scanf("%c %d",&b,&c); printf("%d,%c,%

xml-C++用智能指针循环打开XML文件时指针释放时出错

问题描述 C++用智能指针循环打开XML文件时指针释放时出错 小弟在VS2012中用C++编一个打开XML的程序中遇到了些问题.我打开XML的方法是通过打开一个索引XML文件(Index)然后获得子XML文件的路径,然后在根据这些路径用循环的方式打开子XML文件获取里面的信息.但是,我的程序不知道为什么出错,当子XML是只有一个时,程序就可以正常运行,当子XML是多个的时候,程序就提升出错,有数据中断.我设了断点查看错误原因,具体是在读完子XML,并进行完xmlfile.UnLoadXML()后

asp net ajax-visual studio调试asp.net程序时单步调试时进入函数内部很慢

问题描述 visual studio调试asp.net程序时单步调试时进入函数内部很慢 我的页面采用三层架构,使用jQuery的ajax向后台的一般处理程序请求数据,数据量不是很大,最多也就 几十KB左右,我在一般处理程序中调用读数据库的数据的函数入口添加断点,然后按F11单步调试,从一般处理程序进入逻辑层的函数内部需要很长时间,接近一分钟左右!但是同一个请求,第二次请求时,速度又变得很快了.请问哪位高手遇到过这种类似的问题?有没有什么办法解决?谢谢. 解决方案 是不是第一次需要链接数据库,初始