ايران ويج

نسخه‌ی کامل: مسابقه برنامه نویسی _ کمک
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام
standard input یعنی چی؟
فایل؟ یا صفحه نمایش؟
Standard Input یا stdin یک stream یا کانال ورودی داده ، بین ترمینال متنی ( مثل cmd در ویندوز یا ترمینال در LINUX ) و برنامه در حال اجراست !
در واقع stdin ( تعریف شده در هدر فایل stdio.h ) یک اشاره گر به ساختار فایل (File Descriptor ) هست و بصورت default به شکل رابط بین کیبورد و ترمینال عمل میکنه یعنی هر چه شما با کیبور خودتون تایپ کنید به عنوان ورودی به برنامه در حال اجرا ارسال میشه . ( البته در بسیاری از سیستم ها میشه اون رو تغییر مسیر یا redirect کرد )

مثال ساده ای از دستوری در سیستم عامل UNIX (بسیاری از دستورات در سیستم عامل یونیکس برنامه های مجزا هستند ) که stdin در آن تغییر مسیر داده نشده ( یعنی اینکه برنامه در حال اجرا ، داده های ورودی رو از کیبور دریافت میکنه )

کد:
$Perl

در اینجا موتور زبان Perl متظر میمونه تا شما اسکریپت Perl رو تایپ کنید ( استفاده از کیبورد برای ورود داده ها)

در حالیه در دستور زیر stdin به فایل مربوطه تغییر مسیر داده میشه و برنامه به جای کیبورد اسکریپت رو از فایل مشخص شده میخونه :

کد:
$perl < script.pl
خیییییییییییییییییییییییلی ممنون
حالا سوال بعدی
یکی از سوالاش اینه: فایل digits.in رو باز کنید عدد توشو بردارید بعد مجموع ارقامشو بریزید توی digits.out
من نوشتم:
کد:
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
//sum.cpp by arianvc
int main()
{
    FILE *f;
    long sum = 0, num;
    char s[11];
    if(!(f = fopen("digits.in", "r"))){
        cout << "Error!";
        exit(0);
    }
    fgets(s, 11, f);
    num = atol(s);
    for(;;){
        if((num/10) >= 1){
            sum += num%10;
            num /= 10; } else {
            sum+= num;
            break;}
    }
    ltoa(sum, s, 10);
    if(!(f = fopen("digits.out", "w"))){
        cout << "Error!";
        exit(0);
    }
    fputs(s, f);
    fclose(f);
    return 0;
}
تو کامپیوتر خودم درست کار میکنه ولی روی سرور میگه کامپایلر ارور داده و ارور اینه :
ltoa was not decleared in this scope
کامپایلر هم g++ 4.1.0 هست
اگه atol هست پس چرا ltoa نیست؟؟؟؟؟؟؟؟؟
تابع ltoa جز توابع استاندارد ANSI نیست . شما بهتره از یک راه دیگه استفاده کنید مثلا اون خط کد رو با این خط زیری جایگزین کنی :

کد:
snprintf(s, 10, "%ld", sum);
خیییییییییییییییییییییییییییییییییییییییییییییییییییلییییییی ممنونم
میشه بگید از کجا بدونم فلان تابع جز ANSI هست یانه؟
لیستی هست که توش نوشته شده باشه؟
اینجا رو یه سر بزن : http://www.acm.uiuc.edu/webmonkeys/book/c_guide/
snprintf که توش نبود!
snprintf نسخه portable همون تابع sprintf هست !!
به به!!!