c - 为什么在c中使用scanf()读取限制时无法访问第一个字符串元素

标签 c string scanf gets

int main(){
    char str[10][50],temp[50];
    int lim,i,j;
    printf("Enter lim: ");
    scanf("%d",&lim);
    for(i=0;i<lim;++i){
        printf("Enter string[%d]: ",i+1);
        gets(str[i]);
    }

这里的str[0](Enter string[1]:)无法读取。读取从 'Enter string[2]: '(str[1]) 开始。

但是,如果不是 lim,而是将整数传递给循环,如下所示,程序将正确执行。造成这种情况的原因可能是什么?

int main(){
    char str[10][50],temp[50];
    int lim,i,j;
    for(i=0;i<5;++i){
        printf("Enter string: ");
        gets(str[i]);

    }

最佳答案

您的数字 scanf() 在输入流中留下了换行符,这将提供第一个 gets()

请查看此处寻求帮助:
http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
How to read / parse input in C? The FAQ

此外,您不想再使用 gets()
Why is the gets function so dangerous that it should not be used?

关于c - 为什么在c中使用scanf()读取限制时无法访问第一个字符串元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50870632/

相关文章:

c++ - 同一字符串的多个#define是否使用相同的常量字符串?

objective-c - 绝对值(A)和绝对值(整数)

c++ - 不同字符串的.size()函数值相减

r - 创建一个表,提取字符串中的第一个字母并在 R 中进行计数

c - 使用带有 while 循环的 scanf 输入两个单独的字符串

c - 如果我输入 2 ,然后 printf 结果将是 n=2 m=8 q=32 为什么?

c - 我如何找到一个微妙的错误

arrays - 灵活数组成员使用无效错误

python - 如何在 Ruby 中实现类似 Python 的字符串剥离?

c - 简单读取/显示 C 程序在用户输入数据时输出不正确的值