VC++ בעיה!!!

nimce2474you

New member
VC++ בעיה!!!

אני כתבתי תוכנית ב-VISUAL C++ 6 שמבקשת שם, אם כותבים בשם נגיד "d" אז היא אמורה לבקש שם עוד פעם עד שיכתב שם אחר, אבל זה לא קורה!!! בשני המקרים היא יוצאת בלי בעיות,שהיא אמורה לצאת רק אם השם הוא אחר מ"d" בבקשה עזרה: הנה הקוד...
#include<iostream.h> #include<conio.h> main() { char _name[53]; cout<<"Please enter your name:\n"; cin>>_name; // _name=_name; while (_name=="d") { cout<<"\nENTER NAME!!!"; } }​
 

ilankt

New member
אתה לא יכול ככה

תשתמש בפונקציה strcmp ותבדוק אם היא שווה ל-0 אז זה שווה. לדוגמא:
if (strcmp(mystring,"D")==0)​
 

selalerer

New member
וגם: אתה צריך להכניס את הקלט ב...

...לולאה, אחרת לא תהיה אפשרות לקלוט משהו אחר אם בפעם הראשונה לא הוקלד "d", הלולאה תמשיך לרוץ עד אין סוף.
 

זויברג

New member
נסה את זה כך:

#include <iostream.h> #include <conio.h> #include <string.h> int main(void) { char sName[53] = ""; while (strcmp(sName,"d")) { cout << "\nPlease enter your name: "; cin >> sName; } return 0; }​
 

nimce2474you

New member
תודה רק שיש בעיה...

אם נגיד אני אכניס "d s" (עם רווח),אז הוא יציג (שאמרתי לו להציג) רק את מילה/אות לפני הרווח.. בבקשה עזרה!!!
 

selalerer

New member
זאת הצורה שcin מוגדר לעבור, הוא מחכ

ה לEnter לפני שהוא מעבד את הקלט, אם אתה לא מעוניין בזה, אתה יכול להשתמש בפונקציה get של cin, היא מחזירה לך תו, תו מהקלט ואתה יכול לסיים את הקלט גם כשאתה מקבל ' ' או '-' או כל תו אחר שלדעתך מסיים מילה, החיסרון הוא שתצטרך לעשות פעולות יותר טכניות כמו לשרשר אותו לstring (את התו שהתקבל) ולעשות את הבדיקה שזה התו הוא לא "מסיים מילה". יותר עבודה ויותר שליטה, אבל זה נראה לי יהיה תרגיל טוב למתחיל ב++C. בהצלחה.
 

nimce2474you

New member
בעיה חשובה מאוד!!!!!!!!!!!!!!!!!

הנה עוד תוכנית שכתבתי שעושה בעיות... היא מחשבון,בתחלת הבנייה... היא עובדת ככה: בוחרים פעולה +,-,/,* ואחר כך בוחרים שני מספרים ואז היא מחשבת אותם... רציתי שאם המשתמש מתחכם ומכניס לדוגמה אות ולא פעולה מתמטית אז היא תבקש עוד פעם עד שהמשתמש יכניס פעולה מתמטית... אבל זה לא עובד!!!!!!!!!! מה הבעיה??: הנה התוכנית:
#include <iostream.h> #include <conio.h> #include <string.h> int main(void) { char sP[1] = ""; int C=-1; while ((C==-1)||(C==1)) { cout << "\nPlease enter peula ! "; cin >> sP; // C=4; C=(strcmp(sP,"/")+strcmp(sP,"*")+strcmp(sP,"-")+strcmp(sP,"+")); cout<<C; } cout<<"\nOK!\n"<<endl; getch(); return 0; }​
בבקשה זה דחוף! תודה.
 

זויברג

New member
הנה שיניתי קצת, עכשיו זה עובד...

#include <iostream.h> #include <conio.h> #include <string.h> int main(void) { char sP[1] = ""; int C=4; while (C==4) { cout << "\nPlease enter peula ! "; cin >> sP; C=(strcmp(sP,"/")+strcmp(sP,"*")+strcmp(sP,"-")+strcmp(sP,"+")); cout<<C; } cout<<"\nOK!\n"<<endl; getch(); return 0; }​
 

nimce2474you

New member
שאלה

אפשר לדעת מה הייתה הבעיה בקוד שלי,ומה שינית בקוד?? תודה רבה לך זויברג...!
 

זויברג

New member
הבעיה הייתה בפונקציה strcmp,

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

nimce2474you

New member
../images/Emo5.gifבעיה.....

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

זויברג

New member
שנה טובה ../images/Emo75.gif...

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

nimce2474you

New member
שאלה

בקשר למספרים בלולאה,צודק-טעות שלי... עכשיו שאלה יש בVC++ פונקציה שמטפלת במחרוזות,זאת אומרת שנגיד אני מכניס לה שתקרא את הטקסט "אחת" ומזה שתתקדם לאות השניה ותוציא את האות השנייה... זה קצת לא ברור אני יודע, אבל זה כמו MID בויבי או ב-ASP... יש דבר כזה ב+VC++?? תודה!.
 

selalerer

New member
אפשר ככה:

#include <string> #include <iostream> using namespace std; int main(int argc,char *argv[]) { string str1="blablabla"; cout<<str1[3]<<endl; return 0; }​
 

nimce2474you

New member
../images/Emo12.gifאפשר דרך אחרת?

דרך אגב,שנה טובה! מכיר את הפונקציה MID,אני רוצה כמוהה.... בבקשה,יש לך פיתרון...
 

זויברג

New member
מכיר את הפונקציה MID,

אבל בC אין באמת מחרוזת טבעית, כמו בVB, אלא מחרוזת זה מערך של תווים (אני מניח שאתה כבר יודע את זה), לכן, אם בC אתה רוצה לקבל תו מסויים בתוך מחרוזת, אתה פשוט פונה אליו בעזרת המצביע למשל: sStr[5]. אם אתה רוצה, אתה יכול לעשות פונקציה דומה לMID:
#include <malloc.h> char *Mid(char *str,int iStart,int iLen) { char *sBuff; int i; sBuff = (char *)malloc(iLen + 1); for (i = 0; i < iLen; i++) sBuff = str[i + iStart - 1]; sBuff[iLen] = NULL; return sBuff; }
 

Metheny

Member
אם אני לא טועה...

strcmp יכול גם להחזיר 1- (תלוי איזה מחרוזת יותר "גדולה" מבחינה לקסיקוגרפית), ואז יכולה להיות אפשרות שהמשתמש לא הכניס פעולה ועדיין C לא יהיה שווה ל-4.
 
למעלה