2014-03-29 3 views
0

Я пытаюсь решить одну проблему с практикой кодека subtraction game 1 с программированием c и блоками кода как IDE. Я нашел один способ чтения ввода быстрее, чем функция scanf(), но когда я запускаю свою программу, я получаю ошибку «неопределенная ссылка на« getchar_unlocked »error». Можете ли вы, ребята, сказать мне, что я делаю неправильно, и есть ли какой-либо другой метод для чтения ввода быстрее?undefined ссылка на ошибку 'getchar_unlocked'

#include<stdio.h> 
inline int fastread() 
{ 
     int noRead=0; 
     char p=getchar_unlocked(); 
     for(; p<33;) { 
       p=getchar_unlocked(); 
     }; 
     while(p>32) { 
       noRead = (noRead << 3) + (noRead << 1) + (p - '0'); 
       p=getchar_unlocked(); 
     } 
     return noRead; 
}; 
unsigned int gcd(unsigned int a, unsigned int b) 
{ 
    if (b == 0) 
     return a; 
    else 
     return gcd(b, a % b); 
} 
int main() 
{ 
    int t,i,answer=0; 
    unsigned int n; 
    t = fastread(); 
    while(t--) 
    { 
     n = fastread(); 
     unsigned int a[n]; 
     for(i=0;i<n;i++) 
      a[i]=fastread(); 
     answer = gcd(a[0],a[1]); 
     for(i=2;i<n;i++) 
      answer = gcd(a[i],answer); 
     printf("%u\n",answer); 
    } 
    return 0; 
} 
+0

Я думаю, что 'getchar_unlocked' устарел в Windows, потому что это потоковая небезопасная версия' getchar() '.Sp, возможно, она недоступна в библиотеке блоков кода. Если коэффициент скорости слишком большой, попробуйте избежать getchar_unlocked. –

+0

Возможно, кто-то должен спросить MS, почему они не поддерживают POSIX? – mfro

+0

@Jayesh Это означает, что я не могу использовать getchar_unlocked. можете ли вы предложить любой другой более быстрый способ чтения ввода? –

ответ

2

Цитирование this ответ на SO

getchar_unlocked осуждается в Windows, потому что это небезопасно нить версия GetChar().

getchar_unlocked, который имеет меньше накладных расходов по сравнению с scanf или cin, не является стандартной функцией c или C++, вы всегда можете использовать getchar() для этих целей здесь.

или вы можете написать функцию getchar_unlocked(), чтобы возвращать значения getchar() для целей тестирования, если вы обязаны использовать их в своем онлайн-вопросе.