C语言中scanf被跳过的问题(不是输入字符)

qq_26141913 2015-05-18 05:57:01
这段程序在TC2.0里运行的时候不能输入,直接输出ling然后就结束了,请问什么原因?
#include <stdio.h>
void read(int );
int main()
{
int i;
printf("please input a number:\n");
scanf("%d",&i);
read(i);
return 0;
}

void read(int p){
switch(p){
case 0: printf("ling ");break;
case 1: printf("yi ");break;
case 2: printf("er ");break;
case 3: printf("san ");break;
case 4: printf("si ");break;
case 5: printf("wu ");break;
case 6: printf("liu ");break;
case 7: printf("qi ");break;
case 8: printf("ba ");break;
case 9: printf("jiu ");break;
}
}
...全文
687 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
闲鱼野鸟 2015-05-20
  • 打赏
  • 举报
回复
VS上没问题,估计是编译器差异造成的

懂鸟语的人 2015-05-20
  • 打赏
  • 举报
回复
在VC上面也没有问题
youjun610789338 2015-05-19
  • 打赏
  • 举报
回复
这么奇怪,在Linux下可以输入哦,可能是缓冲区的问题,按楼上说的那样试试刷一下缓冲区再scanf;
赵4老师 2015-05-19
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
char s[80];
int i;
char c;
int main() {
    while (1) {
        printf("Input a integer:");fflush(stdout);
        rewind(stdin);
        fgets(s,80,stdin);
        if (strlen(s)>10) {
            printf("Input too long(>9)!\n");
            continue;
        }
        if (2==sscanf(s,"%d%c",&i,&c)) {
            if ('\n'==c) {
                printf("%d is a integer.\n",i);
                break;
            }
        }
        if ('\n'==s[strlen(s)-1]) s[strlen(s)-1]=0;
        printf("\"%s\" is NOT a integer!\n",s);
    }
    return 0;
}
BrillianceRen 2015-05-18
  • 打赏
  • 举报
回复
恩, 有可能是缓存问题. 在scanf前加个
fflush(stdin);
试试
weixin_28286475 2015-05-18
  • 打赏
  • 举报
回复
难道是输入缓冲区有数据,我乱猜的,不懂编程,hello world水平。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧