2011-05-12 64 views
0
char in[20]; 
    char out[20]; 
    for(int i=0; i < nEdges ;i++){ 

    char str[50]; 
    fgets(str, 50, stdin); 
    char *result = NULL; 
    result = strtok(str, " "); 
    int count = 0; 
    int i = 0; 
    char name[2][20]; 

    while(result != NULL){ 
     strncpy(name[i],result,20); 
     result = strtok(NULL, " "); 
     count++; 
     i++; 
    } 

    if(count > 2){ 
     errorMsg2(); 
    }else{ 
     i = strlen(name[1]); 
    for(int x=0; x < i ;x++){ 
     if(name[1][x] == '\n') 
     name[1][x] = '\0'; 
     strncpy(out,name[0],20); 
     strncpy(in,name[1],20); 
    } 

嗨,我想读一行并验证,而只有两个元素,否则错误消息。这一切都在for循环中,当我执行程序时,fgets从未要求我输入。 fgets是否在循环中工作?fgets内循环C

+0

如果您正在等待某种提示, ''不会“要求你”输入,它只是阻止等待它 – jstanley 2011-05-12 15:12:27

+0

由于输入验证限制,我用fgets方法替换了scanf – Jono 2011-05-12 15:16:37

+0

'fgets()'不会提示你;程序应该坐在那里等待你需要输入输入,当然,如果nEdges为零或负数,循环将永远不会输入 – 2011-05-12 15:24:40

回答

0

如果在循环中使用fgets或不在循环中。有可能是一个不同的问题。使用调试器来完成它将是最好的选择。

一个潜在的问题是将strncpy转换为name的循环。如果缓冲区中有两个以上的项目,那么它将写入name阵列的边界之外。在覆盖之前(而不是在之后)添加一个检查以避免这种可能性可能会很好。

另一个可能的问题是使用变量i。你可能有一些范围问题。该变量用于主循环,然后通过调用strlen在该循环内更新。这可能会导致主循环提前结束(取决于值nEdges和长度name[1]。在任何情况下,这可能不是所需的结果。)