PDA

View Full Version : سوال: ورودی هایی که شامل Space است را چگونه با scanf بخوانیم؟



delta7
دوشنبه 28 فروردین 1391, 12:33 عصر
سلام خدمت دوستان عزیز
یه مشکل داشتم
یه برنامه نوشتم که متوجه مشکلی شدم
بیشتر که نگاه کردم دیدم مشکل از الگوریتم برنامه نیست
قسمتی رو که مشکل داره رو پایین میزارم ببینید مشکل از کجاست



<include <stdio.h#
<include <conio.h#
()void main
}
;[char a[100
;int i=0
;(scanf("%s",a
(++for(i=0;i<100;i
}
('if(a[i]=='\0
;break
;([printf("%c",a[i
{
;()getch
{


اگه ورودی کارکتر بدون space باشه هیچ مشکلی پیش نمیاد ولی اگه داخلش space باشه اینجوری میشه
ورودی: abc def
خروجی: abc
یعنی اینکه کارکتر ها تا قبل از space در خروجی نمایش داده میشن

زبان برنامه نویسی c
محیط برنامه نویسی 3++turboc

M0TR!X
دوشنبه 28 فروردین 1391, 12:58 عصر
سلام.

ميخواي حداكثر يه متن 100 كاراكتري بگيري بعد چاپش كني ؟

اگه اينو ميخواي نميتوني از دستور scanf استفاده كني scanf رشته ورودي رو تا اولين اسپيس ميخونه .

ببين دستور get.line كار ميكنه ! توي c++ جواب ميده

one hacker alone
دوشنبه 28 فروردین 1391, 14:30 عصر
دوستمون راهنماييتون كردن پس حالت صحيح كد به شكل زير ميشه




include <stdio.h#
<include <conio.h#
()void main
}
;[char a[100
;int i=0
get(a);
(++for(i=0;i<100;i
}
('if(a[i]=='\0
;break
;([printf("%c",a[i
{
;()getch

delta7
دوشنبه 28 فروردین 1391, 15:20 عصر
دوستمون راهنماييتون كردن پس حالت صحيح كد به شكل زير ميشه




include <stdio.h#
<include <conio.h#
()void main
}
;[char a[100
;int i=0
get(a);
(++for(i=0;i<100;i
}
('if(a[i]=='\0
;break
;([printf("%c",a[i
{
;()getch



عزیز مشکل داره این get(a);
کامپایل ارور میده
Linker Error: undefined symbol _get in module

delta7
دوشنبه 28 فروردین 1391, 15:27 عصر
برنامه کاملم به این صورت هست
برنامه ای که یک رشته از ورودی دریافت میکنه و در خروجی چاپ میکنه بطوری که حد اکثر 10 حرف در هر خط چاپ بشه و کلمات شکسته نشن(مثل ویرایشگر ورد که اگه کلمه کامل نبود کل کلمه رو میاره خط بعدی)

همون طور که تو توضیحات برنامه نوشتم بجای space باید از ? استفاده بشه
میخوام ؟ رو با space جایگزین کنم

get(a); که گفتید کار نکرد
//HomeWork N.5
//use ? instead space
#include <stdio.h>
#include <conio.h>
void main()
{
char a[100];
int i=0,cnt=0,cnt2,j,spc=0;
scanf("%s",a);
while(a[i]!='\0')
{
if(a[i]=='?')
spC++‎;
i++;
}
for(i=0;i<100;i++)
{
if(a[i]=='\0')
break;
cnt++;
if(cnt==11 && spc==0)
printf("\n");

if(a[i]=='?')
{
j=i;
cnt2=0;
while(a[j+1]!='?'|| a[j]=='\0')
{
cnt2++;
j++;
}
if((10-i)<cnt2)
printf("\n");
}

printf("%c",a[i]);
}
getch();
}

delta7
دوشنبه 28 فروردین 1391, 15:29 عصر
سلام.

ميخواي حداكثر يه متن 100 كاراكتري بگيري بعد چاپش كني ؟

اگه اينو ميخواي نميتوني از دستور scanf استفاده كني scanf رشته ورودي رو تا اولين اسپيس ميخونه .

ببين دستور get.line كار ميكنه ! توي c++ جواب ميده

این دستور get.line رو چطوری مینویسن اگه میشه یه توضیح بدید توی help توربو سی نگاه کردم چیزی متوجه نشدم

delta7
چهارشنبه 30 فروردین 1391, 13:44 عصر
مرسی از زاهنمایی هاتون
پیداش کردم فقط کافیه بجای S% از [n\^]% استفاده کنیم

رامین مرادی
پنج شنبه 31 فروردین 1391, 12:06 عصر
دوست عزیز یه تابع بود به اسم ignoor(n,m) البته فکر کنم املاش غلطه این تابع رو قبل از قط ببنویس تو ان بزار "/n" و تو ام بزار مثلا " 10
این تابع تا زمانی که به اینتر نرسیده باشه کارکتر تو می خونه
بگردی پیدا میشه فکر کنم تو هدر استرینق یا آی او استریم باشه