ABA


"בעיה בלולאות וקלט מערכים בשפת C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #13491 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 13491
Limp Bizkit
חבר מתאריך 2.9.02
3436 הודעות
   20:44   05.08.06   
אל הפורום  
  בעיה בלולאות וקלט מערכים בשפת C  
 
   ערכתי לאחרונה בתאריך 05.08.06 בשעה 20:46 בברכה, Limp Bizkit
 
אני בונה איזה תוכנית, ורק התחלתי לכתוב את הבסיס כדי לראות שהכל מתקדם בסדר, ונתקלתי בבעיה...

הקוד ( רשמתי סוגריים עגולות במקום ריבועיות בגלל שזה לא מציג את זה )


#include <stdio.h>

void main()
{
char c(4)(4);
int i,j,h,z;

printf("Type 16 chars: ");
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
scanf("%c", &c(i)(j));
}

for(h=0; h<4; h++)
{
for(z=0; z<4; z++)
printf("%c", c(h)(z));
}


}

הבעיה :
הוא קולט רק 8 מספרים במקום 16 כמו שביקשתי !

אני מכניס לו כפלט :


a b c d e f g h i j k l m n o p

וזה קולט רק 8 מהאותיות, הכוונה שזה קלט עד האות h, זה מציג לי על המסך ככה :


a b c d e f g h

אם מישהו יוכל להגיד לי למה זה קולט לי 8 מספרים במקום 16 כמו שביקשתי, תודה

Ask any racer, any real racer. It doesn't matter if you win by an inch or a mile; winning's
winning.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תנסה לרשום את זה ככה Nesher  05.08.06 21:06 1
     אותה בעיה בשני הקודים שהבאת לי Limp Bizkit 05.08.06 21:14 2
         לא לא לא תקמפל ככה- sHuMpI 06.08.06 14:15 6
  נתחיל בזה שזה מוזר לי בכלל ש GCC מעביר לך את זה Net_Boy  05.08.06 23:02 3
     הוא מעביר אבל עם הודעת אזהרה Limp Bizkit 05.08.06 23:55 4
         בוודאי :) Net_Boy  06.08.06 00:22 5
  מצאתי את הטעות -=פיתרון=- sHuMpI 06.08.06 14:22 7

       
Nesher  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 2.7.02
2 הודעות, 24 פידבק
   21:06   05.08.06   
אל הפורום  
  1. תנסה לרשום את זה ככה  
בתגובה להודעה מספר 0
 

void main()
{
char c(4)(4);
int i,j;
printf("Type 16 chars: ");
for(i=0; i<4; i++)
for(j=0; j<4; j++)
scanf("%c", &c(i)(j));
for(i=0; i<4; i++)
for(j=0; j<4; j++)
printf("%c", c(h)(z));
}

z ו-h ממש מיותרים

או את זה


void main()
{
char c(4)(4);
int i,j;
printf("Type 16 chars: ");
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
scanf("%c", &c(i)(j));
}
}
for(i=0; i<4; i++)
{
for(j=0; j<4; j++)
{
printf("%c", c(i)(j));
}
}
}

מבחינת שאר הקוד לא נראית לי סיבה מסויימת שזה יקלוט רק 8 מתוך 16


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Limp Bizkit
חבר מתאריך 2.9.02
3436 הודעות
   21:14   05.08.06   
אל הפורום  
  2. אותה בעיה בשני הקודים שהבאת לי  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 05.08.06 בשעה 21:16 בברכה, Limp Bizkit
 
אני לא יודע אם זה קשור, אבל אני מתכנת עכשיו מלינוקס, זה יכול להיות אולי קשור למהדר ? (gcc)

אני מהדר בצורה הזו :


gcc file.c -o file

ופשוט מריץ את זה אחר כך דרך הטרמינל ככה :


./file

אני מתכנת בסביבת KDevelop

Ask any racer, any real racer. It doesn't matter if you win by an inch or a mile; winning's
winning.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sHuMpI

   14:15   06.08.06   
אל הפורום  
  6. לא לא לא תקמפל ככה-  
בתגובה להודעה מספר 2
 
   gcc -Wall -pedantic -ansi file.c -o file.exe

עכשיו אני יסתכל על הקוד


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   23:02   05.08.06   
אל הפורום  
  3. נתחיל בזה שזה מוזר לי בכלל ש GCC מעביר לך את זה  
בתגובה להודעה מספר 0
 
   קומפילציה

int main(int argc, char *argv)

תאמץ, זה התקן (אגב יש סוגרים מרובעות שנמחקו ב ARGV)

כמו שאמרו h,k משתנים מיותרים

ותשובה לשאלתך
אתה הקלדת : a ואז אנטר ואז b ואז אנטר וכך הלאה

enter הוא תו לכל דבר
אם תרשום
abcdefghijklmnop ואז אנטר זה יקלט בלי בעייה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Limp Bizkit
חבר מתאריך 2.9.02
3436 הודעות
   23:55   05.08.06   
אל הפורום  
  4. הוא מעביר אבל עם הודעת אזהרה  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 05.08.06 בשעה 23:56 בברכה, Limp Bizkit
 
h ו-k זה היו משתנים רק לבדיקה... לא השתמשתי בהם

מה שאמרו לי לעשות זה פשוט בתוך הלולאה הפנימית (לפני scanf) להוסיף את הפקודה הבאה :


flushall();

וזהו בעקרון זה עבד
תודה על העזרה

ד"א
אפשר הסבר קטן ל-
int main(int argc, char *argv)

כי בספר לא ציינו את זה
תודה

Ask any racer, any real racer. It doesn't matter if you win by an inch or a mile; winning's
winning.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   00:22   06.08.06   
אל הפורום  
  5. בוודאי :)  
בתגובה להודעה מספר 4
 
   פונקציה main מחזירה integer למערכת ההפעלה האם התוכנית הצליחה

0 במידה וכן (זה המקרה היחידי ש 0 = TRUE )

הפרמטרים בסוגריים לפונקציה הם:

argc - מספר הפרמטרים שהועברו לפונקציה

תמיר סוגריים עגולים למרובעים

()argv* - הפרמטרים שהפונקציה מקבלת

כאשר
argv(0) - זה השם של התוכנית עצמה

לדוגמא אם אתה מריץ את התוכנית שלך שנקראת MyProg.exe
אתה רושם

MyProg.Exe -NoGui -NoSound

argc יהיה 3
ו
argv(0) = MyProg.Exe
argv(1) = -NoGui
argv(2) = -NoSound

ועל פי הפרמטרים אתה תדע ב MAIN של התוכנית שהמשתמש לא רוצה גרפיקה ולא סאונד


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
sHuMpI

   14:22   06.08.06   
אל הפורום  
  7. מצאתי את הטעות -=פיתרון=-  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 06.08.06 בשעה 14:22 בברכה, sHuMpI
 
בעיה ידועה, נפוצה..

כשאתה קולט Char ב- C אז הוא קולט את כל תווי האסקי. אחד מהם הוא אנטר.
כדי לפתור את הבעיה הזאת אתה מוסיף שורה-

getchar();

את השורה הזאת אתה מוסיף אחרי הקלט (אל תשכח להוסיף סוגריים מסולסלים)

אני בדקתי את זה וזה עובד..
תקרא את ההערה שלי בקשר לקימפול שלך זה הקימפול הכי נכון.

תהנה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net