首页 > 解决方案 > 如果在 c 中使用 scanf() 读取限制,为什么不能访问第一个字符串元素

问题描述

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]: ) 无法读取。读取从'输入字符串[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]);

    }

标签: cstringscanfgets

解决方案


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

看看这里寻求帮助:
http ://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html
如何在 C 中读取/解析输入?常见问题解答

此外,您不想再使用gets()了。
为什么gets函数如此危险以至于不应该使用它?


推荐阅读