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

问题描述

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

#include
int main()
{
int s;
while(1)
{
printf("请输入:");
scanf("%d",&s);
printf("%d ",s);
}
/*当给s从键盘接受字母的时候,该循环会出现不同,
原先(正常输入证书的时候)是等待你输入了s过后才
会输出结果,但现在(给s从键盘接受字母的时候)不
需要等待直接死循环下去。
我想请教各位长辈,这是什么原因导致的,怎样才能停
止自动死循环(给s从键盘接受字母的时候),并且,如
何让s从键盘上接收字母的时候,输出相同的字母*/

解决方案

scanf函数从输入流中读取一个数据,其返回值是成功输入的数目,比如说scanf("%d %c",&a,&b),当从键盘键入12 c时,scanf的返回值就是2;

当输入一个与scanf函数中格式转换符不匹配的数据时,scanf就不读取这个数据,而是继续放在输入流(本例中是stdin)中,下一次读取输入流的函数就从这个数据开始读取;

你的例子中,如果输入的是字符,那么与scanf中的格式转换符不匹配,字符放在输入流中,while循环一直进行,下一次scanf读取的还是上一次留在输入流中的字符,再一次不匹配,如此while函数一直执行,scanf并没有成功读取 整数的机会。代码改成如下,便可以避免无限循环的问题:

`#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int s;
while(1)
{
printf("请输入:");
fflush(stdin);//刷新输入流中的数据
if(scanf("%d",&s))
printf("%d ",s);
}
system("pause");
return 0;
}



解决方案二:

scanf("%d"要求输入整形数据不接受字符

解决方案三:

试试下面的代码:

    int s = 0;
    char c = 0;
    while(1)
    {
        printf("请输入:");
        scanf("%d",&s);
        scanf("%c",&c);
        if(0x10 != c)
        {
            break;
        }
        printf("%d rn",s);
    }

解决方案四:

你定义的s是整形,证书是数字整形所以没问题,而字母是字符形的,所以出现错误。下面是代码,已验证
#include
int main()
{
char *a;
while(1)
{
printf("请输入:");
scanf("%s",&*a);
printf("%s n",a);
}
}

解决方案五:

楼主scanf中是%d,自然是只能输入整数存储的数据,所以输入字符会出错,如果想输出字符,可以定义char变量,scanf中用%c啊

时间: 2024-11-01 19:34:30

c语言scanf( )函数的一个问题的相关文章

c语言-C语言scanf()语句的一个问题

问题描述 C语言scanf()语句的一个问题 C语言scanf()什么时候用&,什么时候又不用?为什么要用&,这样用的好处是什么? 解决方案 &的作用是取地址,对于简单变量,比如int float等就需要.字符数组.指针,本身就是指针了,就不需要.不用取地址,函数内怎么把得到的结果再返回主程序呢? 解决方案二: C语言中关于scanf()函数返回值问题C语言scanf问题C语言中scanf的问题 解决方案三: &就是相当于地址的意思,你从键盘中输入数或赋值是要暂时存到一个地

C语言Scanf函数

C语言的scanf函数 一.变量的内存分析 (一)字节与地址 ①. 内存以字节为单位 每个字节都有自己的内存地址,根据地址就可以找到该字节.整个内存相当于一整个酒店,而酒店以房间为单位,在这里每个房间就相当于是每个字节,地址就是房号,根据房号可以找到房间(根据地址也可以找到内存中的字节).相邻房间的房号是连续的,相邻字节的地址也是连续的.计算机中通常以十六进制表示地址. ②. 不同类型占用的字节是不一样的,数据越大则占用的字节数越多.如在64位编译器下,int类型占据4个字节,char类型占据1

c语言scanf()函数的返回值

问题描述 c语言scanf()函数的返回值 c primer plus 一书中,199页的showchar2.c程序中有一行代码是if(scanf("%d %d",&rows,&cols)!=2),请问这里的scanf函数返回值的是参数的个数吗? 解决方案 http://blog.csdn.net/21aspnet/article/details/174326 解决方案二: c语言scanf返回值c语言中 scanf() 和printf()的返回值C语言中的printf

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

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

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

一个关于C语言scanf,和文件读写的问题

问题描述 一个关于C语言scanf,和文件读写的问题 下面这段程序出了点问题void input()中无法对char i进行赋值,就是这句 scanf("%c",&i);在下面已被标出,在运行时会被跳过,我总是看不出什么毛病,想求您给看一眼: 另外还有个问题,这个函数void search()//查询学生成绩有个毛病,也已标出,请老师给看一下. #include"stdio.h" #include"string.h" #include&q

c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求

问题描述 c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求 #include #include int main() { char*s; scanf("%s",s); //printf("%sn",s); //int n = strlen(s); //printf("%dn",n); char ret[56]; return 0; } 解决方案 s只是指针变量,没有分配内存 char*s; s = mall

c语言中怎么把一个大小不确定的二维数组当作参数传入函数中

问题描述 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中 c语言中怎么把一个大小不确定的二维数组当作参数传入函数中,取大神,取大神,取大神 解决方案 用VC++新建一个程序,默认生成的main函数定义如下 int mian(int argc, char* args[]) 这就是一个例子. 解决方案二: 一个表示长度的参数,一个指向二维数组的指针 解决方案三: fun(args[][],int rows,int cols) 解决方案四: void Func(int array[][10]

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

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