עבור לתוכן

|שאלה\בעיה| קליטת מספר בעל 11 ספרות ויותר -שפת C- MVS

Featured Replies

פורסם

שלום, לאחר כתיבת פונקציה כלשהי שמחפשת כמה פעמים מופיע מספר כלשהו במספר נתון נתקלתי בבעיה כאשר הזנתי מספר בעל ספרות רבות, יכול להיות שאני טועה בהגדרת ההזנה ויכול להיות שזה באג, אין לי מושג.

מתברר שהמספר שאני מזין אפילו לא נשמר בצורה תקינה, בלי קשר לפונקציה או לקוד, אפילו בקוד הנ"ל :-



#include <stdio.h>

int main()

{

long int n;

scanf("%ld", &n);

printf("%ld", n);

return 0;}

כאשר אני מזין קלט של n בעל ספרות קטנות מ11 אני מקבל את מה שביקשתי, למשל אם הזנתי 1111 אקבל 1111

אך במקרה ואני מזין n גדול מ11 ספרות אקבל משהו חסר משמעות כמו -1773790777

למה זה קורה? :S

פורסם

מה זה MVS?

long int מוגדר להיות לפחות 32 ביט, כלומר מקסימום 2 בחזקת 31 (או בחזקת 32, אם זה unsigned). במערכות מסויימות זה 32 ביט בעוד שבמערכות אחרות זה 64 ביט. אתה יכול לבדוק בקלות את הגודל במערכת שלך באמצעות sizeof.

בשביל להבטיח 64 ביט, תשתמש ב-long long int, אבל אז צריך לקלוט ולהדפיס באמצעות lld ולא רק ld.

פורסם
  • מחבר

תודה רבה פתרת לי את הבעיה :D

MVS זה קיצור של Microsoft visual studio

סביר להניח שזה קיצור לא רשמי

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים