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

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

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

Solutions Collecting From Web of "为什么不input一个string的工作?"

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] = '\0'; 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 input\n"); return 1; } if (rc == TOO_LONG) { printf ("Input too long\n"); 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; } } }