קליטת משתנה unsigned long long int

otherside3

New member
קליטת משתנה unsigned long long int

הי,
משהו מוזר שלא הצלחתי להבין (שימוש בתוכנת codeclock גרסא 16.1 ל-windwos בתקן C99ׂ
ניסיתי לקלוט משתנה מהסוג הנדון דרך scanf
קוד:
#include <stdio.h>

int main()
{
    unsigned long long int num; 
    if (scanf("%llu",&num)!= 1)
    {
        return -1;
    }
  return 0;
}
אבל אני מקבל את השגיאה:
קוד:
error: unknown conversion type character 'l' in format [-Werror=format=]|
error: too many arguments for format [-Werror=format-extra-args]|

(יש לציין כי לצורך המשימה הספציפית הזאת אני חייב להשתמש ב- unsigned long long int).

אשמח לעזרה, אם מישהו יודע למה זה קורה


תודה וסוף שבוע טוב!
 

BravoMan

Active member
הבעיה היא שאתה עובד על WIndows

ll זה לא בדיוק חלק מסטנדרט של C.
&nbsp
נסה להשתמש ב-L או ב-q אולי הם נתמכים בספריה שאתה משתמש בה...
 

otherside3

New member
הרג אותי כבר.....

ניסיתי llu, %lld, %I64d. %lli, %I64u%.......
כל דבר שהצלחתי למצוא ב-stack overflow...הוא לא מקבל כלום
 

otherside3

New member
אכן,

ניסיתי L, Lu, LLu, q, qu,qqu (כמובן עם % לפניהם, חלק מהם כנראה לא ביטויים אמיתיים אבל ניסיתי כל קומבינציה אפשרית של אותיות..)
 

BravoMan

Active member
עוד שאלה, האם אתה בטוח שקבעת לו להשתמש בתקן C99?

אני לא עובד עם Code Blocks אבל גיגול מהיר מראה שאתה צריך ללכת ל-Project->Build Options->Compiler Flags
&nbsp
https://stackoverflow.com/a/33209049
&nbsp
תוודה שיש שם:
std=c99-
 

otherside3

New member
יש אפשרות להגדיר את התקן לכל

פרויקט בנפרד דרך project, ויש אפשרות להגדיר את זה כקבוע דרך settings
אצלי זה מוגדר קבוע (מצורפת תמונה..)

 

otherside3

New member
הי,

ניסיתי גם את זה.
אני מקבל עדיין את אותה שגיאת קומפילציה כמו בהודעה המקורית (רק שהפעם כתוב שזאת המרה לא ידועה עם L גדול במקום l קטן..)
&nbsp
בכל מקרה, לאור כך שנוצרה בעיה ממש רחבה עם המשימה הזאת (תחת הדרישות הספציפיות שניתנו בה), הוחלט בסופו של דבר לזנוח את הדרישה לקלוט unsigned long long לטובת דרישת קליטת int רגיל, אז בינתיים "נפתרה" הבעיה...
&nbsp
תודה לכולם

&nbsp
 
למעלה