2013-12-17 106 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循環。