微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么不input一个string的工作?

#include <stdio.h> int main() { char temp[1024]; if(getchar() != 'y') { printf("no optionsn"); return 1; } scanf(temp,"%s"); printf("%s",temp); }

我得到如下代码片段。 我只是想两次从用户input。 但第一个input工作,但第二个直接跳过和printf("%s",temp); 印出意外的字符。 我怎样才能解决这个问题.. thanx

Environment.UserName是否会在Windows 7,Windows 8.x和Windows 10中返回相同的结果?

在Windows 8应用程序中浏览文件夹?

关于学习Xlib(“Linux Petzold”)的书籍/资源?

在Windows上编译Objective-C程序

如何在Windows机器上编译用于Linux的.NET Core应用程序

scanf的第一个参数是格式,第二个参数是缓冲区。 你有它倒退。 尝试scanf( "%s",temp ); 。

其他人已经给了你实际的答案,你应该接受其中的一个,但如果你喜欢这个贤者的建议,可以自由地upVote我:-)

如果您正在寻找一个强大的应用程序,就不应该使用gets 。 这是因为没有办法防止可能导致程序不安全的缓冲区溢出。

在下面的程序中,我更喜欢getLine()这样的小函数。 它使用fgets 可以保护免受流量的影响,并且是一个强大的解决方案。

#include <stdio.h> #include <string.h> #define OK 0 #define NO_INPUT 1 #define TOO_LONG 2 static int getLine (char *prmpt,char *buff,size_t sz) { int ch,extra; // Get line with buffer overrun protection. if (prmpt != NULL) { printf ("%s",prmpt); fflush (stdout); } if (fgets (buff,sz,stdin) == NULL) return NO_INPUT; // If it was too long,there'll be no newline. In that case,we flush // to end of line so that excess doesn't affect the next call. if (buff[strlen(buff)-1] != 'n') { extra = 0; while (((ch = getchar()) != 'n') && (ch != EOF)) extra = 1; return (extra == 1) ? TOO_LONG : OK; } // Otherwise remove newline and give string back to caller. buff[strlen(buff)-1] = ''; return OK; }

// Test program for getLine(). int main (void) { int rc; char buff[10]; rc = getLine ("Enter string> ",buff,sizeof(buff)); if (rc == NO_INPUT) { printf ("No inputn"); return 1; } if (rc == TOO_LONG) { printf ("Input too longn"); return 1; } printf ("OK [%s]n",buff); return 0; }

样例使用'hello', CTRL D和一个太大的字符串运行:

pax> ./qq Enter string> hello OK [hello] pax> ./qq Enter string> No input pax> ./qq Enter string> dfgdfgjdjgdfhggh Input too long pax> _

您需要将参数切换到scanf 。

#include <cstdio> using namespace std; int main() { char buf[100]; while (true) { if (scanf("%s",buf) == EOF) { printf("fail"); return 1; } } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐