题目是这样的:
了解switch分支结构,输入一个‘0’-‘9’的字符。打印该字符,如果连续输入同一个数字字符,则不打印。除了基本数据类型,不允许使用其他数据类型。如果使用其他数据类型。如果输入非数字字符,则打印错误信息。
下面是我写的代码,但是调试不出来,希望高手们能指出我的错误,或提供一个代码(最好有注释),小弟在此谢谢了!
#include "stdio.h"
void main( )
{
char num;
char c;
bool flag=true;
printf("Please input a number:\n");
while(flag)
{
scanf("%c",&num);
switch(num)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': printf("%c\n",num );
break;
default: printf("input error!!!\n");
flag=false;
break;
}
scanf("%c",&c );
if (c==num)
{
flag=false;
}
else num=c;
}
}
16 个解决方案
#1
基本不现实 啊 每次的话都会输入读取一个字符
#2
就好比你输入 11 他一定会先读取一个1 然后另外一个1 存储在缓冲区的 可以清楚缓冲区 但是不能解决你要的结果
#3
#include "stdio.h"
void main( )
{
char num;
char c;
bool flag=true;
printf("Please input a number:\n");
scanf("%c",&num);
while(flag)
{
switch(num)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': printf("%c\n",num );
break;
default:
printf("input error!!!\n");
flag=false;
fflush(stdin);
break;
}
scanf("%c",&c );
if (c==num)
{
flag=false;
}
else num=c;
}
}
#4
#include "stdio.h"
void main( ){
char num;
bool flag=true;
while(flag) {
printf("Please input a number: ");
scanf("%c",&num);
switch(num) {
case '0':
printf("%c\n",num );
break;
case '1':
printf("%c\n",num );
break;
case '2':
printf("%c\n",num );
break;
case '3':
printf("%c\n",num );
break;
case '4':
printf("%c\n",num );
break;
case '5':
printf("%c\n",num );
break;
case '6':
printf("%c\n",num );
break;
case '7':
printf("%c\n",num );
break;
case '8':
printf("%c\n",num );
break;
case '9': printf("%c\n",num );
break;
default:
printf("input error!!!\n");
flag=false;
break;
}
getchar();
}
}
//能行不?
void main( ){
char num;
bool flag=true;
while(flag) {
printf("Please input a number: ");
scanf("%c",&num);
switch(num) {
case '0':
printf("%c\n",num );
break;
case '1':
printf("%c\n",num );
break;
case '2':
printf("%c\n",num );
break;
case '3':
printf("%c\n",num );
break;
case '4':
printf("%c\n",num );
break;
case '5':
printf("%c\n",num );
break;
case '6':
printf("%c\n",num );
break;
case '7':
printf("%c\n",num );
break;
case '8':
printf("%c\n",num );
break;
case '9': printf("%c\n",num );
break;
default:
printf("input error!!!\n");
flag=false;
break;
}
getchar();
}
}
//能行不?
#5
这个代码还是运行不了啊,还有“fflush(stdin);”这个是什么意思啊?
#6
这个也还是不行,就是第一次输入2,输出2,第二次再输入2,应该停止打印。但是这个代码打印不了!不过谢谢你提供的代码啊!
#7
绿色的那个可以的,不知道你什么编译器,fflush(stdin)就是清空缓冲,把该输出的都强制输出
#8
#include "stdio.h"
int main(void )
{
char num;
char c;
bool flag=true;
printf("Please input a number:\n");
while(flag)
{
fflush(stdin);
scanf("%c",&num);
if( c == num) continue;
switch(num)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': printf("%c\n",num );
break;
default: printf("input error!!!\n");
flag=false;
break;
}
c=num;
}
return 0;
}
没太明白意思,看看这个行不。
#9
别搞的太复杂了,fflush(stdin),弄得跟C++一样,C标准里对输入缓冲区的刷新是没有定义的。
不用char,用int吧
不用char,用int吧
#10
这就C语言里的清除掉输入栈中的数据,没错,也不是C++中的,就存放在stdio.h中
#11
唔,C++里对输入流的刷新是合法的,所以有cin.sync()的用法,我不知道大家对fflush(stdin)是否来自于C++的习惯,但是
int fflush(FILE* stream);
Flushes stream stream and returns zero on success or EOF on error. Effect undefined for input stream. fflush(NULL) flushes all output streams.
当然,有些实现,比如gcc,它有自己的扩展,能够实现刷新输入流的功能。
#12
呵呵,bool 这个的确是c++里面的声明符。而fflush(stdin)我在标准c编译器的确可以编译通过。
#13
嗯,是这样的。
#14
谢谢,这个很接近了。这个问题的意思是:输入的必须是数字,并且直接打印出来,如果不是数字则显示错误。还有如果这次输入和上次输入的一样,那么就停止打印,并结束运行。例如:如果输入2,则打印2,如果下一次又输入2,则不打印,并结束运行;输入“A”则打印错误信息结束运行。 我用的是microsoft visual c++6.0 编译器的。
#15
把continue 改成break;
#16
终于成功了,非常的感谢啊!
#1
基本不现实 啊 每次的话都会输入读取一个字符
#2
就好比你输入 11 他一定会先读取一个1 然后另外一个1 存储在缓冲区的 可以清楚缓冲区 但是不能解决你要的结果
#3
#include "stdio.h"
void main( )
{
char num;
char c;
bool flag=true;
printf("Please input a number:\n");
scanf("%c",&num);
while(flag)
{
switch(num)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': printf("%c\n",num );
break;
default:
printf("input error!!!\n");
flag=false;
fflush(stdin);
break;
}
scanf("%c",&c );
if (c==num)
{
flag=false;
}
else num=c;
}
}
#4
#include "stdio.h"
void main( ){
char num;
bool flag=true;
while(flag) {
printf("Please input a number: ");
scanf("%c",&num);
switch(num) {
case '0':
printf("%c\n",num );
break;
case '1':
printf("%c\n",num );
break;
case '2':
printf("%c\n",num );
break;
case '3':
printf("%c\n",num );
break;
case '4':
printf("%c\n",num );
break;
case '5':
printf("%c\n",num );
break;
case '6':
printf("%c\n",num );
break;
case '7':
printf("%c\n",num );
break;
case '8':
printf("%c\n",num );
break;
case '9': printf("%c\n",num );
break;
default:
printf("input error!!!\n");
flag=false;
break;
}
getchar();
}
}
//能行不?
void main( ){
char num;
bool flag=true;
while(flag) {
printf("Please input a number: ");
scanf("%c",&num);
switch(num) {
case '0':
printf("%c\n",num );
break;
case '1':
printf("%c\n",num );
break;
case '2':
printf("%c\n",num );
break;
case '3':
printf("%c\n",num );
break;
case '4':
printf("%c\n",num );
break;
case '5':
printf("%c\n",num );
break;
case '6':
printf("%c\n",num );
break;
case '7':
printf("%c\n",num );
break;
case '8':
printf("%c\n",num );
break;
case '9': printf("%c\n",num );
break;
default:
printf("input error!!!\n");
flag=false;
break;
}
getchar();
}
}
//能行不?
#5
这个代码还是运行不了啊,还有“fflush(stdin);”这个是什么意思啊?
#6
这个也还是不行,就是第一次输入2,输出2,第二次再输入2,应该停止打印。但是这个代码打印不了!不过谢谢你提供的代码啊!
#7
绿色的那个可以的,不知道你什么编译器,fflush(stdin)就是清空缓冲,把该输出的都强制输出
#8
#include "stdio.h"
int main(void )
{
char num;
char c;
bool flag=true;
printf("Please input a number:\n");
while(flag)
{
fflush(stdin);
scanf("%c",&num);
if( c == num) continue;
switch(num)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': printf("%c\n",num );
break;
default: printf("input error!!!\n");
flag=false;
break;
}
c=num;
}
return 0;
}
没太明白意思,看看这个行不。
#9
别搞的太复杂了,fflush(stdin),弄得跟C++一样,C标准里对输入缓冲区的刷新是没有定义的。
不用char,用int吧
不用char,用int吧
#10
这就C语言里的清除掉输入栈中的数据,没错,也不是C++中的,就存放在stdio.h中
#11
唔,C++里对输入流的刷新是合法的,所以有cin.sync()的用法,我不知道大家对fflush(stdin)是否来自于C++的习惯,但是
int fflush(FILE* stream);
Flushes stream stream and returns zero on success or EOF on error. Effect undefined for input stream. fflush(NULL) flushes all output streams.
当然,有些实现,比如gcc,它有自己的扩展,能够实现刷新输入流的功能。
#12
呵呵,bool 这个的确是c++里面的声明符。而fflush(stdin)我在标准c编译器的确可以编译通过。
#13
嗯,是这样的。
#14
谢谢,这个很接近了。这个问题的意思是:输入的必须是数字,并且直接打印出来,如果不是数字则显示错误。还有如果这次输入和上次输入的一样,那么就停止打印,并结束运行。例如:如果输入2,则打印2,如果下一次又输入2,则不打印,并结束运行;输入“A”则打印错误信息结束运行。 我用的是microsoft visual c++6.0 编译器的。
#15
把continue 改成break;
#16
终于成功了,非常的感谢啊!