GetRich פורסם 2010 באוקטובר 31 Share פורסם 2010 באוקטובר 31 אוקיי, נניח ויש לי תוכנה כזו:#include<stdio.h>int main(void){ int a1,a2,a3; a(*) = 1; a(*+1) = 2; a(*+2) = 3; printf("%d,%d,%d",a(*),a(*+1),a(*+2)); return 0;}הכוכבית מייצגת את המספר של המשתנה. אני רוצה להגדיר משתנה חיצוני שיבוא במקום הכוכבית ולפיו התוכנה תפנה למשתנה הנכון.למשל, הגדרתי משתנה n = 1. אני רוצה לפנות ל-a1 בתור 'a'n ואז התוכנה תדע לפנות ל-a1.אפשרי לעשות את זה חוץ משימוש במערך?תודה! קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 באוקטובר 31 Share פורסם 2010 באוקטובר 31 אם אתה רוצה להשתמש במשתנה עבור האינדקס, אתה חייב מערכים. תזכור שלאחר שהתכנית מתקמפלת, השמות של המשתנים כבר חסרי משמעות (אין יותר a1,a2,a3, אלא רק "המשתנה הראשון", "המשתנה השני" וכן הלאה). קישור לתוכן שתף באתרים אחרים More sharing options...
Zelig פורסם 2010 באוקטובר 31 Share פורסם 2010 באוקטובר 31 א) מה שאתה רוצה זה לא הרבה משתנים, אלא משתנה אחד שהוא מערך.ב) בשום אופן אל תשתמש ב-* להראות לנו דברים בקוד. * זה אופרטור של C (למעשה שני אופרטורים שונים) וזה משגע לראות קוד כזה. תשתמש במשהו אחר.ג) הקוד כמו שכתבת לא קרוב להתקמפל. זה לא C ואי אפשר לעשות בדיוק את מה שאתה רוצה ב-C. אבל אפשר לעשות משהו דומה שהוא נכון יותר. ראה (א).#include<stdio.h>int main(void){ int a[3]; a[0] = 1; a[1] = 2; a[2] = 3; printf("%d,%d,%d",a[0],a[1],a[2]); return 0;} קישור לתוכן שתף באתרים אחרים More sharing options...
GetRich פורסם 2010 באוקטובר 31 מחבר Share פורסם 2010 באוקטובר 31 הייתה לי הרגשה שזה לא אפשרי. אגב, היה לי ברור שזה לא יתקמפל. זה היה רק בשביל הדוגמה יש לי סיבה לא להשתמש במערך כי כבר יש לי קוד בערך כזה: #define io_1 DIG_OUT_IO1#define io_2 DIG_OUT_IO2 . .#define io_16 DIG_OUT_IO16 אלה יציאות של בקר ואני צריך לפנות בפונקציה מסויימת ליציאה שמתקבלת ממשתנה חיצוני. אין לי אפשרות לשנות את הקוד הזה כדי שזה יהיה מוגדר כמערך. חיפשתי דרך קצת יותר אלגנטית מלעשות 16 CASE-ים. קישור לתוכן שתף באתרים אחרים More sharing options...
Zelig פורסם 2010 באוקטובר 31 Share פורסם 2010 באוקטובר 31 טוב אני מניח שאתה יכול לעשות מערך של מצביעים ל-16 משתנים אמיתיים... קישור לתוכן שתף באתרים אחרים More sharing options...
GetRich פורסם 2010 בנובמבר 1 מחבר Share פורסם 2010 בנובמבר 1 לא חשבתי על הרעיון עם המצביעים [הרמה שלי ב-C לא גבוהה במיוחד], אני מניח שזה מה שאני אעשה ואז אני לא אצטרך CASE-ים.. זה גם יכול להיות שימושי בהמשך התוכנה.ושאלה אחרת: אם אני מבקש ממשתמש להכניס ערך (ע"י scanf), האם יש לי אפשרות לעשות הבחנה בין 0 ל- 0- (מינוס אפס. כן, אני יודע שאין כזה דבר..) קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 בנובמבר 1 Share פורסם 2010 בנובמבר 1 קלוט את הערך בתור מחרוזת ולא בתור מספר, ותוכל לעשות איתו מה שאתה רוצה. קישור לתוכן שתף באתרים אחרים More sharing options...
GetRich פורסם 2010 בנובמבר 1 מחבר Share פורסם 2010 בנובמבר 1 כן, אבל אני צריך לקלוט תחום גדול של מספרים ואני רוצה לעשות על המספר הנתון מניפולציות כמו על int. זה בכל זאת אפשרי עם משתנה מסוג char? [או שאני בכלל לא בכיוון וזה לא מה שהתכוונת?] קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 בנובמבר 1 Share פורסם 2010 בנובמבר 1 אין כזה דבר. המחשב לא יודע מה זה 0-, מבחינתו זה פשוט 0. אתה מוזמן להגדיר טיפוס נתונים מיוחד בשבילך שבו תהיה הבדלה בין 0 ל0-, אבל אל תצפה מהמחשב לעשות את זה בשבילך. קישור לתוכן שתף באתרים אחרים More sharing options...
GetRich פורסם 2010 בנובמבר 2 מחבר Share פורסם 2010 בנובמבר 2 בסוף התמודדתי עם זה כך: char a[2]; scanf("%s",&a); if (a[0]=='-') { switch(a[1]) { case '0': printf("-0"); break; default: printf("NEGATIVE"); break; } } else { printf("POSITIVE"); }וכאשר אני רוצה לבצע מניפולציות על הערך הנ"ל, יש את הפקודה הזאת:http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/תודה על העזרה!נ.ב. אם יש למישהו דרך טובה יותר, אנא, האר את עיניי. קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2010 בנובמבר 2 Share פורסם 2010 בנובמבר 2 הרעיון התיאורטי שלך סבבה, אבל יש לך שגיאות במימוש: על מנת לאכלס מחרוזת, גודל המערך שלך צריך להיות לפחות 1 יותר מאורך המחרוזת המקסימלי (המקום הנוסף הוא בשביל ה-null terminator).אם אתה מראש יודע שהמשתמש עומד להכניס מספר, אתה יכול לעשות עוד משהו - קרא תו אחד מהקלט באמצעות getc או getchar. אם התו הוא '-' אז תרשום לך את זה, ותקרא את שאר המספר עם scanf. אם התו הוא לא מינוס, תחזיר אותו לקלט באמצעות ungetc ואז תקרא את כל המספר עם scanf. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.