ABA


"שאלה בC , איך אני יכול לקלוט שורה של תווים"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10369 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10369
zonda
חבר מתאריך 19.9.08
1402 הודעות, דרג אמינות חבר זה
   19:36   27.04.11   
אל הפורום  
  שאלה בC , איך אני יכול לקלוט שורה של תווים  
 
   בעל אורך לא ידוע?
אני רוצה לקלוט פעם אחת מהמשתמש
sdjfsdjfhskjfhkshdf
ועכשיו לעבור אות אות על הקלט
אז אם אני עושה
char patern;
printf("enter patern");
scanf("%c",&patern);
הוא התוכנית לא מכניסה לי את הערך למשתנה
בגדול אני רוצה לעבור תו תו בנפרד בצורה כזו :
while (patern!='\n' )
{
scanf ("%c",&patern)
.
.
.
}
אז מה עושים?


כי סקולס הוא גאון.


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  משהו כזה.. VeNom  27.04.11 19:48 1
     זה טיפה מסובך לי zonda 27.04.11 20:17 2
         אני לא מבין אותך.. VeNom  27.04.11 20:24 3
  אני הייתי מגדיר מחרוזת בהקצאה דימנית ShocKi  29.04.11 00:11 4

       
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק, 2 נקודות
   19:48   27.04.11   
אל הפורום  
  1. משהו כזה..  
בתגובה להודעה מספר 0
 
   לא העברתי קומפילציה אבל זה אמור לעבור:
תוכנית שקולטת מחרוזת(מפסיקה באנטר) ועוברת תו תו ובמקרה הזה בודקת האם הוא אות קטנה..אם כן מכניסה למחרוזת..אחרת מתעלמת(זו סתם דוגמא שתבין)..


#include <stdio.h>
#include <stdlib.h>

int main()
{
char c;
char* string;
int i = 0, j = 0;
string = (char*)malloc(sizeof(char));
printf("insert string:\n");
do
{
c = getchar();//get a char
if(c >= 'a' && c <= 'z') // for instance get only low case letters..
{
string = (char*)realloc(string,sizeof(char)*(i+1));
string[i] = c;
i++;
}

}while(c != '\n');

printf("Lower case string:\n");
for(j = 0 ; j < i ; j++)
printf("%c",string[j]);
printf("\n");

free(string);
return 0;
}
[\code]


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
zonda
חבר מתאריך 19.9.08
1402 הודעות, דרג אמינות חבר זה
   20:17   27.04.11   
אל הפורום  
  2. זה טיפה מסובך לי  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 27.04.11 בשעה 20:21 בברכה, zonda
 
אני חייב להשתמש בgetchar? מה הפונקציה הזו עושה?

כל מה שאני צריך זה לקלוט שורה של תווים לתוך משתנה אחד ולעבוד עליו
כלומר
לקלוט souifgsodfusoifusidf
ככה מהמשתמש( לא ידוע כמה אותיות הוא מקליד)
ואז פשוט לעבור תו תו בלי מערך פשוט לעשות לולאה שבה כל עוד scanf(%c,&patern) שונה מ \n כלומר enter אז אני אבצע עליה פעולות. אבל כל מה שאני עושה התוכנית לא קולט לי את התווים כמו שאני רוצה


כי סקולס הוא גאון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק, 2 נקודות
   20:24   27.04.11   
אל הפורום  
  3. אני לא מבין אותך..  
בתגובה להודעה מספר 2
 
   אתה יכול לקלוט משורת המשתמש מחרוזת שלמה בפקודה כזו:

scanf(%s,string);
ואז לעשות משהו כזה..
int i = 0 ;
while(string != '\n')
{
//do something
i++;
}


מצד שני אם אתה לא רוצה לעבוד עם מערכים(צא מנקודת הנחה שמחרוזת זה מערך של תוים) אז אתה יכול כמו קודם לבצע getchar שזו פונקציה שיודעת לקלוט מהקונסול(לצורך העניין stdin) תוים ועליו לבצע דברים כלומר:

char c;
while(1)
{
c = getchar();
if(c == '\n')
break;
//do something with c
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק, 17 נקודות
   00:11   29.04.11   
אל הפורום  
  4. אני הייתי מגדיר מחרוזת בהקצאה דימנית  
בתגובה להודעה מספר 0
 
   וקולט תווים בודדים, על כל תו שאני קולט הייתי עושה realloc ומגדיל את המקום של המחרוזת...

זה בפשטות ובהנחה שסיבוכיות אינה רלוונטית.

אם הסיבוכיות רלוונטית הייתי עושה הקצאה דינאמית לרשימה מקושרת ובכל תו עושה realloc ומוסיף צומת לרשימה.


קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


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

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

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



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