“ZHUPIANZI”通过精心收集,向本站投稿了4篇C++/C调试输入小结,下面是小编整理后的C++/C调试输入小结,希望对大家有所帮助。

C++/C调试输入小结

篇1:C++/C调试输入小结



C++调试输入

1.从文件

ifstream cin(“in.txt”,ios::in);

if(!cin){

cerr<<“open error!”<

exit(1);

}

//your code

cin.close;

2.从字符缓存区

char input[]=“”; //input可初始化为需要输入的数据

istrstream cin(input);

//your code

C调试输入

//标准输入重定向到文件

freopen(“in.txt”,“r”,stdin);

//your code

fclose(stdin);

C字符串格式化化输入输出函数

1.int sprintf( char *buffer, const char *format, [ argument] … );

功能:

将argument中的数据格式化输出到字符串缓冲区,

C++/C调试输入小结

参数:

buffer:字符串的缓冲区。

format:格式控制字符串。

[argument]...:可选参数,可以是任何类型的数据。

2.int sscanf(const char *buffer,const char*format,[argument ]...);

功能:

从字符串缓冲区中依照format的格式将数据写入到argument里

参数:

buffer:字符串缓冲区

C++C调试输入小结

format:格式控制字符串

argument 选择性设定字符串

篇2:c语言:模拟三次密码输入。

模拟三次密码输入,

解:程序:

#include#include#includeint main(){int i;char *p = “123456”;char arr[10];for (i = 0; i < 3; i++){printf(“请输入密码:”);scanf(“%s”,arr);if (strcmp(p,arr)==0){break;}else {printf(“密码错误!\n”);}}if (i==3){printf(“三次密码输入错误,系统将在3秒后自动关闭!\n”);Sleep(3000);}else if(i<3){printf(“恭喜你登录成功!\n”);}return 0;}

结果1:

请输入密码:123567

密码错误!

请输入密码:65848

密码错误!

请输入密码:135268

密码错误!

三次密码输入错误,系统将在3秒后自动关闭!

请按任意键继续. . .

结果2:

请输入密码:123456

恭喜你登录成功!

请按任意键继续. . .

篇3:C语言输入中对scanf和gets讨论

1. scanf的函数原型是 scanf(format,parmeter1,…) ,而gets的函数原型是 gets(char *),

2. scanf和gets最容易被谈论的差别就是scanf不能接受带空格的字符串,而gets可以。事实上,准确的说,如果一个字符串要被赋值为一个变量,但其中含有空格的话,scanf是不能接受到的,因为scanf遇到空格、换行以及制表符时都会结束针对当前正在接受的这个变量的输入。但gets仅当遇到换行符时才结束针对当前变量的输入。为什么我这么强调当前变量呢?因为如果scanf的第一个参数format为 “%s %s” 时,输入 hello world 时,他会把 hello 赋值给第一个变量而把 world 赋值给第二个变量。而直接用 gets 时,第一个变量的值就是 hello world. 总之,准确的说,scanf 遇到空格、换行及制表符会认为当前变量的输入已结束,而 gets 仅当遇到换行符才会认为当前变量输入结束。

3. 值得思考的是,为什么会是这样呢?这就要关心 scanf 的函数原型了,我强调第一个参数为格式,即 format 是个表示格式的字符串,而该字符串中遇到%d这样的符号时,才告诉程序这是变量需要替换的位置。这一点让 scanf 的输入有了很大的灵活性,比如针对某种特殊的输入要求,每行的格式为 #,#-- -#,# ,其中#表示变量, 我们可以令 format 为 “%d,%d-- -%d,%d”,这样使用就很灵活,而且注意,其中是不是包含了空格?这也就是为什么我在第二点中强调 scanf 遇到空格、换行及制表符会结束“当前变量”的输入,而非结束整个scanf函数的输入!

总结:scanf 遇到空格、换行及制表符会认为当前变量的输入已结束,而 gets 仅当遇到换行符才会认为当前变量输入结束。 scanf 的第一个参数为格式,利用好它可以对于程序的输入有很好的灵活性。

附:一个简单的测试程序:

#include

int main{

//input a string with a fixed format

//if we set the format to be #,#,# #,#,#

int a,b,c,d,e,f;

char str[100];

printf(“USE SCANF TO GET INPUT:\n”);

scanf(“%d,%d,%d %d,%d,%d”,&a,&b,&c,&d,&e,&f);

printf(“ACCEPTED SUCCESS!THE VARIATBLE IS:a:%d,b:%d,c:%d,d:%d,e:%d,f:%d\n”,a,b,c,d,e,f);

getchar();//use for block the \n

printf(“USE GETS TO GET INPUT:\n”);

gets(str);

printf(“ACCEPTED SUCCESS!THE VARIATBLE IS:str:%s\n”,str);

return 0;

}

程序运行结果:

USE SCANF TO GET INPUT:

1,2,3 4,5,6

ACCEPTED SUCCESS!THE VARIATBLE IS:a:1,b:2,c:3,d:4,e:5,f:6

USE GETS TO GET INPUT:

1,2,3 4,5,6

ACCEPTED SUCCESS!THE VARIATBLE IS:str:1,2,3 4,5,6

篇4:c语言:C语言清空输入缓冲区在标准输入(stdin)情况

C语言清空输入缓冲区在标准输入(stdin)情况下的使用

程序1:

//功能:先输入一个数字,再输入一个字符,输出hello bit#include int main(){int num = 0;char ch = ' ';scanf(“%d”, &num);scanf(“%c”, &ch);printf(“hello bit\n”);system(“pause”);return 0;}

结果:

7

hello bit

请按任意键继续. . .

分析:并没有输入字符,直接就输出了“hello bit”,因为在点击回车(‘\n’)时,相当于输入了一个字符,那么我们需要进行清空缓冲区处理

程序2:

#include int main(){int num = 0;char ch = ' ';scanf(“%d”, &num);/*fflush(stdin);*/ //清空缓冲区时容易出错,不建议使用/*scanf(“%*[^\n]”);*///也不好用,容易失效 setbuf(stdin, NULL);//使stdin输入流由默认缓冲区转为无缓冲区,可以用scanf(“%c”, &ch);printf(“hello bit\n”);system(“pause”);return 0;}

结果:

5

j

hello bit

请按任意键继续. . .

程序3:

//功能:先输入一个数字,再输入一个字符,输出hello bit#include #define CLEAR_BUF() \int c = 0; \while ((c = getchar()) != EOF && c != '\n')\{ \ ; \}int main(){int num = 0;char ch = ' ';scanf(“%d”, &num);CLEAR_BUF();scanf(“%c”, &ch);printf(“hello bit\n”);system(“pause”);return 0;}

结果:

8

s

hello bit

请按任意键继续. . .

分析:程序3建议使用,不停地使用getchar()获取缓冲中字符,直到获取的C是“\n”或文件结尾符EOF为止,此方法可完美清除输入缓冲区,并具备可移植性

阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。