我在C中编写了一个简单的程序,如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int length;
printf("Enter the length of the string:\t");
scanf("%d",&length);
char str1[10];
printf("Enter string:\t");
gets(str1);
printf("%s",str1);
return 0;
}
当我执行它时 - 我得到一个输出:
Enter the length of the string: 5
Enter string:
Process returned 0 (0x0) execution time : 1.740 s
Press any key to continue.
我不知道为什么它不会要求输入字符串而只是退出程序。
答案 0 :(得分:0)
当您输入5并按Enter键为“\ n”时,“\ n”仍保留在流中并被分配到str1
。您需要从输入流中取出“\ n”,其中有许多选项。你可以搞清楚。 :)也许以后我会编辑这个答案让你知道。
编辑1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int length;
char c;
printf("Enter the length of the string:\t");
scanf("%d%c",&length, &c);
char str1[10];
printf("Enter string:\t");
gets(str1);
printf("%s",str1);
return 0;
}
这是不正确的做法,但你的代码至少会开始工作。您也可以简单地拨打getc(stdin)
,这稍微好一些。在其他答案中指定的scanf
正则表达式已被标记为重复也将起作用,但是很丑陋且不必要地复杂化。
我没有对此进行测试,但可能无效。
答案 1 :(得分:0)
当您键入“5”后跟回车键时,您将向程序发送两个字符 - “5”和换行符。因此,您的第一个scanf
获取“5”,第二个获取换行符,转换为数字零。