程序没有完全执行和跳过语句

时间:2016-12-18 09:31:04

标签: c

我在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.

我不知道为什么它不会要求输入字符串而只是退出程序。

2 个答案:

答案 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”,第二个获取换行符,转换为数字零。

请参阅How to read a line from the console in C?