我正在尝试使用宽度说明符和printf函数格式化c中某些字符串的输出.但是我无法获得我想要的行为.似乎每次printf遇到字符å,ä或ö时,为字符串保留的宽度会缩小一个位置.
代码片段说明:
#include <stdio.h>
int main(void)
{
printf(">%-10s<\n", "aoa");
printf(">%-10s<\n", "aäoa");
printf(">%-10s<\n", "aäoöa");
printf(">%-10s<\n", "aäoöaå");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的ubuntu linux bash-shell中输出.
>aoa <
>aäoa <
>aäoöa <
>aäoöaå <
Run Code Online (Sandbox Code Playgroud)
我正在寻找有关如何处理这个问题的建议.我想要的是上面代码片段中的所有字符串都在空格填充的10字符宽字段中打印,如下所示:
>aoa <
>aäoa <
>aäoöa <
>aäoöaå <
Run Code Online (Sandbox Code Playgroud)
如果这不是其他设置的问题,我也很感激有关为什么会发生这种情况或反馈的任何见解.
我是 rx 的新手,并且一直在使用 dot net 中的反应式扩展来处理一些网络代码。我的问题是,当我通过我提供的令牌触发取消时,我使用异步函数创建的 tcpClients 的 observable 没有像我预期的那样完成。这是我遇到问题的代码的简化版本:
public static class ListenerExtensions
{
public static IObservable<TcpClient> ToListenerObservable(
this IPEndPoint endpoint,
int backlog)
{
return new TcpListener(endpoint).ToListenerObservable(backlog);
}
public static IObservable<TcpClient> ToListenerObservable(
this TcpListener listener,
int backlog)
{
return Observable.Create<TcpClient>(async (observer, token) =>
{
listener.Start(backlog);
try
{
while (!token.IsCancellationRequested)
observer.OnNext(await Task.Run(() => listener.AcceptTcpClientAsync(), token));
//This never prints and onCompleted is never called.
Console.WriteLine("Completing..");
observer.OnCompleted();
}
catch (System.Exception error)
{
observer.OnError(error);
}
finally
{
//This is never executed and my …Run Code Online (Sandbox Code Playgroud)