2013-12-17 75 views
1

我希望能够停止用户在结构的.data部分输入任何非数字字符。他们也可以输入最多50个数字字符,但不能再输入。我已经想出了这个循环,但它不起作用。我是C新手,所以我没有大量的东西可以尝试。验证以停止输入字符,最多输入50个数字字符

do{ 
    puts("Enter up to 50 numerical characters"); 
    scanf("%50s", &records[*rCount].data); 
    for(i = 0; i < records[*rCount].data; i++) 
    { 
     if(!isdigit(records[*rCount].data[i])) 
     { 
      valid = 0; 
      getchar(); 
      puts("\nNot a valid input"); 
      break; 
     } 
     else 
     { 
      valid = 1; 
     } 
    } 

} while(valid!=1); 

回答

0
  1. 始终测试的scanf()

    if (scanf("%50s", &records[*rCount].data) != 1) { 
        valid = 0; 
        getchar(); 
        puts("\nNot a valid input"); 
        continue; 
    } 
    
  2. 结果上终止records[*rCount].data[i] == '\0'

    for(i = 0; records[*rCount].data[i] != '\0'; i++) 
    
  3. 你的循环可以使用if (scanf(" %50[0-9]", &records[*rCount].data) != 1)并跳过for循环。