עזרה ב-C - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה ב-C


GetRich

Recommended Posts

אוקיי, נניח ויש לי תוכנה כזו:

#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.

אפשרי לעשות את זה חוץ משימוש במערך?

תודה!

קישור לתוכן
שתף באתרים אחרים

אם אתה רוצה להשתמש במשתנה עבור האינדקס, אתה חייב מערכים. תזכור שלאחר שהתכנית מתקמפלת, השמות של המשתנים כבר חסרי משמעות (אין יותר a1,a2,a3, אלא רק "המשתנה הראשון", "המשתנה השני" וכן הלאה).

קישור לתוכן
שתף באתרים אחרים

א) מה שאתה רוצה זה לא הרבה משתנים, אלא משתנה אחד שהוא מערך.

ב) בשום אופן אל תשתמש ב-* להראות לנו דברים בקוד. * זה אופרטור של 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;
}

קישור לתוכן
שתף באתרים אחרים

הייתה לי הרגשה שזה לא אפשרי. אגב, היה לי ברור שזה לא יתקמפל. זה היה רק בשביל הדוגמה :lol:

יש לי סיבה לא להשתמש במערך כי כבר יש לי קוד בערך כזה:

#define io_1 DIG_OUT_IO1
#define io_2 DIG_OUT_IO2
.
.
#define io_16 DIG_OUT_IO16

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

קישור לתוכן
שתף באתרים אחרים

לא חשבתי על הרעיון עם המצביעים [הרמה שלי ב-C לא גבוהה במיוחד], אני מניח שזה מה שאני אעשה ואז אני לא אצטרך CASE-ים.. זה גם יכול להיות שימושי בהמשך התוכנה.

ושאלה אחרת: אם אני מבקש ממשתמש להכניס ערך (ע"י scanf), האם יש לי אפשרות לעשות הבחנה בין 0 ל- 0- (מינוס אפס. כן, אני יודע שאין כזה דבר..)

קישור לתוכן
שתף באתרים אחרים

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

קישור לתוכן
שתף באתרים אחרים

בסוף התמודדתי עם זה כך:

  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/

תודה על העזרה!

נ.ב.

אם יש למישהו דרך טובה יותר, אנא, האר את עיניי.

קישור לתוכן
שתף באתרים אחרים

הרעיון התיאורטי שלך סבבה, אבל יש לך שגיאות במימוש: על מנת לאכלס מחרוזת, גודל המערך שלך צריך להיות לפחות 1 יותר מאורך המחרוזת המקסימלי (המקום הנוסף הוא בשביל ה-null terminator).

אם אתה מראש יודע שהמשתמש עומד להכניס מספר, אתה יכול לעשות עוד משהו - קרא תו אחד מהקלט באמצעות getc או getchar. אם התו הוא '-' אז תרשום לך את זה, ותקרא את שאר המספר עם scanf. אם התו הוא לא מינוס, תחזיר אותו לקלט באמצעות ungetc ואז תקרא את כל המספר עם scanf.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...