هل هناك وظيفة في C تفعل نفس raw_input في بيثون؟
سؤال
هل هناك وظيفة C تفعل الشيء نفسه raw_input
في بيثون؟
#in Python::
x = raw_input("Message Here:")
كيف يمكنني كتابة شيء من هذا القبيل في ج؟
تحديث::
أقوم بهذا ، لكنني أحصل على خطأ ::
#include<stdio.h>
#include<string.h>
#include "stdlib.h"
typedef char * string;
int raw_input(string msg);
string s;
string *d;
main(){
raw_input("Hello, Enter Your Name: ");
d = &s;
printf("Your Name Is: %s", s);
}
int raw_input(string msg){
string name;
printf("%s", msg);
scanf("%s", &name);
*d = name;
return 0;
}
والخطأ هو أن البرنامج يعمل وطباعة MSG ، واتخذ نوع المستخدم بواسطة ScanF ، ولكن بعد ذلك يعلق ويخرج .. ؟؟
المحلول
يمكنك كتابة واحدة بسهولة تامة ، لكنك تريد أن تكون حذراً بشأن تدفقات المخزن المؤقت:
void raw_input(char *prompt, char *buffer, size_t length)
{
printf("%s", prompt);
fflush(stdout);
fgets(buffer, length, stdin)
}
ثم استخدمه مثل هذا:
char x[MAX_INPUT_LENGTH];
raw_input("Message Here:", x, sizeof x);
قد ترغب في إضافة بعض التحقق من الأخطاء ، وهلم جرا.
نصائح أخرى
ال Posix.1-2008 المعيار يحدد الوظيفة الحصول على خط, ، والتي ستقوم بتخصيص الذاكرة ديناميكيًا لتوفير مساحة لخط من الطول التعسفي.
هذا له الفائدة gets
كونه غير معرض للتفاض إلى المخزن المؤقت الثابت ، والفائدة على fgets
من القدرة على التعامل مع خطوط من أي طول ، على حساب كونها DOS محتملة إذا كان طول الخط أطول من مساحة الكومة المتاحة.
قبل دعم POSIX 2008 ، كشفت GLIBC هذا كملحق GNU أيضًا.
char *input(const char *prompt, size_t *len) {
char *line = NULL;
if (prompt) {
fputs(prompt, stdout);
fflush(stdout);
}
getline(&line, len, stdin);
return line;
}
تذكر أن free(line)
بعد الانتهاء من ذلك.
لقراءة في المخزن المؤقت ذات الحجم الثابت ، استخدم fgets
أو scanf("%*c")
أو مشابه؛ يتيح لك ذلك تحديد عدد أقصى عدد من الأحرف للمسح الضوئي ، لمنع فائض المخزن المؤقت الثابت. (لا يوجد سبب للاستخدام على الإطلاق gets
, ، إنه غير آمن!)
char line[1024] = "";
scanf("%1023s", line); /* scan until whitespace or no more space */
scanf("%1023[^\n]", line); /* scan until newline or no more space */
fgets(line, 1024, stdin); /* scan including newline or no more space */
يستخدم printf
لطباعة الموجه الخاص بك ، ثم استخدم fgets
لقراءة الرد.
الإجابة المختارة تبدو معقدة بالنسبة لي.
أعتقد أن هذا أسهل قليلاً:
#include "stdio.h"
int main()
{
char array[100];
printf("Type here: ");
gets(array);
printf("You said: %s\n", array);
return 0;
}